|  |  | eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (/* binding */ katex)\n/* harmony export */ });\n/**\n * Lexing or parsing positional information for error reporting.\n * This object is immutable.\n */ class SourceLocation {\n    // The + prefix indicates that these fields aren't writeable\n    // Lexer holding the input string.\n    // Start offset, zero-based inclusive.\n    // End offset, zero-based exclusive.\n    constructor(lexer, start, end){\n        this.lexer = void 0;\n        this.start = void 0;\n        this.end = void 0;\n        this.lexer = lexer;\n        this.start = start;\n        this.end = end;\n    }\n    /**\n   * Merges two `SourceLocation`s from location providers, given they are\n   * provided in order of appearance.\n   * - Returns the first one's location if only the first is provided.\n   * - Returns a merged range of the first and the last if both are provided\n   *   and their lexers match.\n   * - Otherwise, returns null.\n   */ static range(first, second) {\n        if (!second) {\n            return first && first.loc;\n        } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {\n            return null;\n        } else {\n            return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);\n        }\n    }\n}\n/**\n * Interface required to break circular dependency between Token, Lexer, and\n * ParseError.\n */ /**\n * The resulting token returned from `lex`.\n *\n * It consists of the token text plus some position information.\n * The position information is essentially a range in an input string,\n * but instead of referencing the bare input string, we refer to the lexer.\n * That way it is possible to attach extra metadata to the input string,\n * like for example a file name or similar.\n *\n * The position information is optional, so it is OK to construct synthetic\n * tokens if appropriate. Not providing available position information may\n * lead to degraded error reporting, though.\n */ class Token {\n    // don't expand the token\n    // used in \\noexpand\n    constructor(text, loc){\n        this.text = void 0;\n        this.loc = void 0;\n        this.noexpand = void 0;\n        this.treatAsRelax = void 0;\n        this.text = text;\n        this.loc = loc;\n    }\n    /**\n   * Given a pair of tokens (this and endToken), compute a `Token` encompassing\n   * the whole input range enclosed by these two.\n   */ range(endToken, text // the text of the newly constructed token\n    ) {\n        return new Token(text, SourceLocation.range(this, endToken));\n    }\n}\n/**\n * This is the ParseError class, which is the main error thrown by KaTeX\n * functions when something has gone wrong. This is used to distinguish internal\n * errors from errors in the expression that the user provided.\n *\n * If possible, a caller should provide a Token or ParseNode with information\n * about where in the source string the problem occurred.\n */ class ParseError {\n    // Error start position based on passed-in Token or ParseNode.\n    // Length of affected text based on passed-in Token or ParseNode.\n    // The underlying error message without any context added.\n    constructor(message, token // An object providing position information\n    ){\n        this.name = void 0;\n        this.position = void 0;\n        this.length = void 0;\n        this.rawMessage = void 0;\n        var error = \"KaTeX parse error: \" + message;\n        var start;\n        var end;\n        var loc = token && token.loc;\n        if (loc && loc.start <= loc.end) {\n            // If we have the input and a position, make the error a bit fancier\n            // Get the input\n            var input = loc.lexer.input; // Prepend some information\n            start = loc.start;\n            end = loc.end;\n            if (start === input.length) {\n                error += \" at end of input: \";\n            } else {\n                error += \" at position \" + (start + 1) + \": \";\n            } // Underline token in question using combining underscores\n            var underlined = input.slice(start, end).replace(/[^]/g, \"$&̲\"); // Extract some context from the input and add it to the error\n            var left;\n            if (start > 15) {\n                left = \"…\" + input.slice(start - 15, start);\n            } else {\n                left = input.slice(0, start);\n            }\n            var right;\n            if (end + 15 < input.length) {\n                right = input.slice(end, end + 15) + \"…\";\n            } else {\n                right = input.slice(end);\n            }\n            error += left + underlined + right;\n        } // Some hackery to make ParseError a prototype of Error\n        // See http://stackoverflow.com/a/8460753\n        // $FlowFixMe\n        var self = new Error(error);\n        self.name = \"ParseError\"; // $FlowFixMe\n        self.__proto__ = ParseError.prototype;\n        self.position = start;\n        if (start != null && end != null) {\n            self.length = end - start;\n        }\n        self.rawMessage = message;\n        return self;\n    }\n} // $FlowFixMe More hackery\nParseError.prototype.__proto__ = Error.prototype;\n/**\n * This file contains a list of utility functions which are useful in other\n * files.\n */ /**\n * Return whether an element is contained in a list\n */ var contains = function contains(list, elem) {\n    return list.indexOf(elem) !== -1;\n};\n/**\n * Provide a default value if a setting is undefined\n * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022.\n */ var deflt = function deflt(setting, defaultIfUndefined) {\n    return setting === undefined ? defaultIfUndefined : setting;\n}; // hyphenate and escape adapted from Facebook's React under Apache 2 license\nvar uppercase = /([A-Z])/g;\nvar hyphenate = function hyphenate(str) {\n    return str.replace(uppercase, \"-$1\").toLowerCase();\n};\nvar ESCAPE_LOOKUP = {\n    \"&\": \"&\",\n    \">\": \">\",\n    \"<\": \"<\",\n    '\"': \""\",\n    \"'\": \"'\"\n};\nvar ESCAPE_REGEX = /[&><\"']/g;\n/**\n * Escapes text to prevent scripting attacks.\n */ function escape(text) {\n    return String(text).replace(ESCAPE_REGEX, (match)=>ESCAPE_LOOKUP[match]);\n}\n/**\n * Sometimes we want to pull out the innermost element of a group. In most\n * cases, this will just be the group itself, but when ordgroups and colors have\n * a single element, we want to pull that out.\n */ var getBaseElem = function getBaseElem(group) {\n    if (group.type === \"ordgroup\") {\n        if (group.body.length === 1) {\n            return getBaseElem(group.body[0]);\n        } else {\n            return group;\n        }\n    } else if (group.type === \"color\") {\n        if (group.body.length === 1) {\n            return getBaseElem(group.body[0]);\n        } else {\n            return group;\n        }\n    } else if (group.type === \"font\") {\n        return getBaseElem(group.body);\n    } else {\n        return group;\n    }\n};\n/**\n * TeXbook algorithms often reference \"character boxes\", which are simply groups\n * with a single character in them. To decide if something is a character box,\n * we find its innermost group, and see if it is a single character.\n */ var isCharacterBox = function isCharacterBox(group) {\n    var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters\n    return baseElem.type === \"mathord\" || baseElem.type === \"textord\" || baseElem.type === \"atom\";\n};\nvar assert = function assert(value) {\n    if (!value) {\n        throw new Error(\"Expected non-null, but got \" + String(value));\n    }\n    return value;\n};\n/**\n * Return the protocol of a URL, or \"_relative\" if the URL does not specify a\n * protocol (and thus is relative).\n */ var protocolFromUrl = function protocolFromUrl(url) {\n    var protocol = /^\\s*([^\\\\/#]*?)(?::|�*58|�*3a)/i.exec(url);\n    return protocol != null ? protocol[1] : \"_relative\";\n};\nvar utils = {\n    contains,\n    deflt,\n    escape,\n    hyphenate,\n    getBaseElem,\n    isCharacterBox,\n    protocolFromUrl\n};\n/* eslint no-console:0 */ // TODO: automatically generate documentation\n// TODO: check all properties on Settings exist\n// TODO: check the type of a property on Settings matches\nvar SETTINGS_SCHEMA = {\n    displayMode: {\n        type: \"boolean\",\n        description: \"Render math in display mode, which puts the math in \" + \"display style (so \\\\int and \\\\sum are large, for example), and \" + \"centers the math on the page on its own line.\",\n        cli: \"-d, --display-mode\"\n    },\n    output: {\n        type: {\n            enum: [\n                \"htmlAndMathml\",\n                \"html\",\n                \"mathml\"\n            ]\n        },\n        description: \"Determines the markup language of the output.\",\n        cli: \"-F, --format <type>\"\n    },\n    leqno: {\n        type: \"boolean\",\n        description: \"Render display math in leqno style (left-justified tags).\"\n    },\n    fleqn: {\n        type: \"boolean\",\n        description: \"Render display math flush left.\"\n    },\n    throwOnError: {\n        type: \"boolean\",\n        default: true,\n        cli: \"-t, --no-throw-on-error\",\n        cliDescription: \"Render errors (in the color given by --error-color) ins\" + \"tead of throwing a ParseError exception when encountering an error.\"\n    },\n    errorColor: {\n        type: \"string\",\n        default: \"#cc0000\",\n        cli: \"-c, --error-color <color>\",\n        cliDescription: \"A color string given in the format 'rgb' or 'rrggbb' \" + \"(no #). This option determines the color of errors rendered by the \" + \"-t option.\",\n        cliProcessor: (color)=>\"#\" + color\n    },\n    macros: {\n        type: \"object\",\n        cli: \"-m, --macro <def>\",\n        cliDescription: \"Define custom macro of the form '\\\\foo:expansion' (use \" + \"multiple -m arguments for multiple macros).\",\n        cliDefault: [],\n        cliProcessor: (def, defs)=>{\n            defs.push(def);\n            return defs;\n        }\n    },\n    minRuleThickness: {\n        type: \"number\",\n        description: \"Specifies a minimum thickness, in ems, for fraction lines,\" + \" `\\\\sqrt` top lines, `{array}` vertical lines, `\\\\hline`, \" + \"`\\\\hdashline`, `\\\\underline`, `\\\\overline`, and the borders of \" + \"`\\\\fbox`, `\\\\boxed`, and `\\\\fcolorbox`.\",\n        processor: (t)=>Math.max(0, t),\n        cli: \"--min-rule-thickness <size>\",\n        cliProcessor: parseFloat\n    },\n    colorIsTextColor: {\n        type: \"boolean\",\n        description: \"Makes \\\\color behave like LaTeX's 2-argument \\\\textcolor, \" + \"instead of LaTeX's one-argument \\\\color mode change.\",\n        cli: \"-b, --color-is-text-color\"\n    },\n    strict: {\n        type: [\n            {\n                enum: [\n                    \"warn\",\n                    \"ignore\",\n                    \"error\"\n                ]\n            },\n            \"boolean\",\n            \"function\"\n        ],\n        description: \"Turn on strict / LaTeX faithfulness mode, which throws an \" + \"error if the input uses features that are not supported by LaTeX.\",\n        cli: \"-S, --strict\",\n        cliDefault: false\n    },\n    trust: {\n        type: [\n            \"boolean\",\n            \"function\"\n        ],\n        description: \"Trust the input, enabling all HTML features such as \\\\url.\",\n        cli: \"-T, --trust\"\n    },\n    maxSize: {\n        type: \"number\",\n        default: Infinity,\n        description: \"If non-zero, all user-specified sizes, e.g. in \" + \"\\\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, \" + \"elements and spaces can be arbitrarily large\",\n        processor: (s)=>Math.max(0, s),\n        cli: \"-s, --max-size <n>\",\n        cliProcessor: parseInt\n    },\n    maxExpand: {\n        type: \"number\",\n        default: 1000,\n        description: \"Limit the number of macro expansions to the specified \" + \"number, to prevent e.g. infinite macro loops. If set to Infinity, \" + \"the macro expander will try to fully expand as in LaTeX.\",\n        processor: (n)=>Math.max(0, n),\n        cli: \"-e, --max-expand <n>\",\n        cliProcessor: (n)=>n === \"Infinity\" ? Infinity : parseInt(n)\n    },\n    globalGroup: {\n        type: \"boolean\",\n        cli: false\n    }\n};\nfunction getDefaultValue(schema) {\n    if (schema.default) {\n        return schema.default;\n    }\n    var type = schema.type;\n    var defaultType = Array.isArray(type) ? type[0] : type;\n    if (typeof defaultType !== \"string\") {\n        return defaultType.enum[0];\n    }\n    switch(defaultType){\n        case \"boolean\":\n            return false;\n        case \"string\":\n            return \"\";\n        case \"number\":\n            return 0;\n        case \"object\":\n            return {};\n    }\n}\n/**\n * The main Settings object\n *\n * The current options stored are:\n *  - displayMode: Whether the expression should be typeset as inline math\n *                 (false, the default), meaning that the math starts in\n *                 \\textstyle and is placed in an inline-block); or as display\n *                 math (true), meaning that the math starts in \\displaystyle\n *                 and is placed in a block with vertical margin.\n */ class Settings {\n    constructor(options){\n        this.displayMode = void 0;\n        this.output = void 0;\n        this.leqno = void 0;\n        this.fleqn = void 0;\n        this.throwOnError = void 0;\n        this.errorColor = void 0;\n        this.macros = void 0;\n        this.minRuleThickness = void 0;\n        this.colorIsTextColor = void 0;\n        this.strict = void 0;\n        this.trust = void 0;\n        this.maxSize = void 0;\n        this.maxExpand = void 0;\n        this.globalGroup = void 0;\n        // allow null options\n        options = options || {};\n        for(var prop in SETTINGS_SCHEMA){\n            if (SETTINGS_SCHEMA.hasOwnProperty(prop)) {\n                // $FlowFixMe\n                var schema = SETTINGS_SCHEMA[prop]; // TODO: validate options\n                // $FlowFixMe\n                this[prop] = options[prop] !== undefined ? schema.processor ? schema.processor(options[prop]) : options[prop] : getDefaultValue(schema);\n            }\n        }\n    }\n    /**\n   * Report nonstrict (non-LaTeX-compatible) input.\n   * Can safely not be called if `this.strict` is false in JavaScript.\n   */ reportNonstrict(errorCode, errorMsg, token) {\n        var strict = this.strict;\n        if (typeof strict === \"function\") {\n            // Allow return value of strict function to be boolean or string\n            // (or null/undefined, meaning no further processing).\n            strict = strict(errorCode, errorMsg, token);\n        }\n        if (!strict || strict === \"ignore\") {\n            return;\n        } else if (strict === true || strict === \"error\") {\n            throw new ParseError(\"LaTeX-incompatible input and strict mode is set to 'error': \" + (errorMsg + \" [\" + errorCode + \"]\"), token);\n        } else if (strict === \"warn\") {\n            typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n        } else {\n            // won't happen in type-safe code\n            typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n        }\n    }\n    /**\n   * Check whether to apply strict (LaTeX-adhering) behavior for unusual\n   * input (like `\\\\`).  Unlike `nonstrict`, will not throw an error;\n   * instead, \"error\" translates to a return value of `true`, while \"ignore\"\n   * translates to a return value of `false`.  May still print a warning:\n   * \"warn\" prints a warning and returns `false`.\n   * This is for the second category of `errorCode`s listed in the README.\n   */ useStrictBehavior(errorCode, errorMsg, token) {\n        var strict = this.strict;\n        if (typeof strict === \"function\") {\n            // Allow return value of strict function to be boolean or string\n            // (or null/undefined, meaning no further processing).\n            // But catch any exceptions thrown by function, treating them\n            // like \"error\".\n            try {\n                strict = strict(errorCode, errorMsg, token);\n            } catch (error) {\n                strict = \"error\";\n            }\n        }\n        if (!strict || strict === \"ignore\") {\n            return false;\n        } else if (strict === true || strict === \"error\") {\n            return true;\n        } else if (strict === \"warn\") {\n            typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n            return false;\n        } else {\n            // won't happen in type-safe code\n            typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n            return false;\n        }\n    }\n    /**\n   * Check whether to test potentially dangerous input, and return\n   * `true` (trusted) or `false` (untrusted).  The sole argument `context`\n   * should be an object with `command` field specifying the relevant LaTeX\n   * command (as a string starting with `\\`), and any other arguments, etc.\n   * If `context` has a `url` field, a `protocol` field will automatically\n   * get added by this function (changing the specified object).\n   */ isTrusted(context) {\n        if (context.url && !context.protocol) {\n            context.protocol = utils.protocolFromUrl(context.url);\n        }\n        var trust = typeof this.trust === \"function\" ? this.trust(context) : this.trust;\n        return Boolean(trust);\n    }\n}\n/**\n * This file contains information and classes for the various kinds of styles\n * used in TeX. It provides a generic `Style` class, which holds information\n * about a specific style. It then provides instances of all the different kinds\n * of styles possible, and provides functions to move between them and get\n * information about them.\n */ /**\n * The main style class. Contains a unique id for the style, a size (which is\n * the same for cramped and uncramped version of a style), and a cramped flag.\n */ class Style {\n    constructor(id, size, cramped){\n        this.id = void 0;\n        this.size = void 0;\n        this.cramped = void 0;\n        this.id = id;\n        this.size = size;\n        this.cramped = cramped;\n    }\n    /**\n   * Get the style of a superscript given a base in the current style.\n   */ sup() {\n        return styles[sup[this.id]];\n    }\n    /**\n   * Get the style of a subscript given a base in the current style.\n   */ sub() {\n        return styles[sub[this.id]];\n    }\n    /**\n   * Get the style of a fraction numerator given the fraction in the current\n   * style.\n   */ fracNum() {\n        return styles[fracNum[this.id]];\n    }\n    /**\n   * Get the style of a fraction denominator given the fraction in the current\n   * style.\n   */ fracDen() {\n        return styles[fracDen[this.id]];\n    }\n    /**\n   * Get the cramped version of a style (in particular, cramping a cramped style\n   * doesn't change the style).\n   */ cramp() {\n        return styles[cramp[this.id]];\n    }\n    /**\n   * Get a text or display version of this style.\n   */ text() {\n        return styles[text$1[this.id]];\n    }\n    /**\n   * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)\n   */ isTight() {\n        return this.size >= 2;\n    }\n} // Export an interface for type checking, but don't expose the implementation.\n// This way, no more styles can be generated.\n// IDs of the different styles\nvar D = 0;\nvar Dc = 1;\nvar T = 2;\nvar Tc = 3;\nvar S = 4;\nvar Sc = 5;\nvar SS = 6;\nvar SSc = 7; // Instances of the different styles\nvar styles = [\n    new Style(D, 0, false),\n    new Style(Dc, 0, true),\n    new Style(T, 1, false),\n    new Style(Tc, 1, true),\n    new Style(S, 2, false),\n    new Style(Sc, 2, true),\n    new Style(SS, 3, false),\n    new Style(SSc, 3, true)\n]; // Lookup tables for switching from one style to another\nvar sup = [\n    S,\n    Sc,\n    S,\n    Sc,\n    SS,\n    SSc,\n    SS,\n    SSc\n];\nvar sub = [\n    Sc,\n    Sc,\n    Sc,\n    Sc,\n    SSc,\n    SSc,\n    SSc,\n    SSc\n];\nvar fracNum = [\n    T,\n    Tc,\n    S,\n    Sc,\n    SS,\n    SSc,\n    SS,\n    SSc\n];\nvar fracDen = [\n    Tc,\n    Tc,\n    Sc,\n    Sc,\n    SSc,\n    SSc,\n    SSc,\n    SSc\n];\nvar cramp = [\n    Dc,\n    Dc,\n    Tc,\n    Tc,\n    Sc,\n    Sc,\n    SSc,\n    SSc\n];\nvar text$1 = [\n    D,\n    Dc,\n    T,\n    Tc,\n    T,\n    Tc,\n    T,\n    Tc\n]; // We only export some of the styles.\nvar Style$1 = {\n    DISPLAY: styles[D],\n    TEXT: styles[T],\n    SCRIPT: styles[S],\n    SCRIPTSCRIPT: styles[SS]\n};\n/*\n * This file defines the Unicode scripts and script families that we\n * support. To add new scripts or families, just add a new entry to the\n * scriptData array below. Adding scripts to the scriptData array allows\n * characters from that script to appear in \\text{} environments.\n */ /**\n * Each script or script family has a name and an array of blocks.\n * Each block is an array of two numbers which specify the start and\n * end points (inclusive) of a block of Unicode codepoints.\n */ /**\n * Unicode block data for the families of scripts we support in \\text{}.\n * Scripts only need to appear here if they do not have font metrics.\n */ var scriptData = [\n    {\n        // Latin characters beyond the Latin-1 characters we have metrics for.\n        // Needed for Czech, Hungarian and Turkish text, for example.\n        name: \"latin\",\n        blocks: [\n            [\n                0x0100,\n                0x024f\n            ],\n            [\n                0x0300,\n                0x036f\n            ] // Combining Diacritical marks\n        ]\n    },\n    {\n        // The Cyrillic script used by Russian and related languages.\n        // A Cyrillic subset used to be supported as explicitly defined\n        // symbols in symbols.js\n        name: \"cyrillic\",\n        blocks: [\n            [\n                0x0400,\n                0x04ff\n            ]\n        ]\n    },\n    {\n        // Armenian\n        name: \"armenian\",\n        blocks: [\n            [\n                0x0530,\n                0x058F\n            ]\n        ]\n    },\n    {\n        // The Brahmic scripts of South and Southeast Asia\n        // Devanagari (0900–097F)\n        // Bengali (0980–09FF)\n        // Gurmukhi (0A00–0A7F)\n        // Gujarati (0A80–0AFF)\n        // Oriya (0B00–0B7F)\n        // Tamil (0B80–0BFF)\n        // Telugu (0C00–0C7F)\n        // Kannada (0C80–0CFF)\n        // Malayalam (0D00–0D7F)\n        // Sinhala (0D80–0DFF)\n        // Thai (0E00–0E7F)\n        // Lao (0E80–0EFF)\n        // Tibetan (0F00–0FFF)\n        // Myanmar (1000–109F)\n        name: \"brahmic\",\n        blocks: [\n            [\n                0x0900,\n                0x109F\n            ]\n        ]\n    },\n    {\n        name: \"georgian\",\n        blocks: [\n            [\n                0x10A0,\n                0x10ff\n            ]\n        ]\n    },\n    {\n        // Chinese and Japanese.\n        // The \"k\" in cjk is for Korean, but we've separated Korean out\n        name: \"cjk\",\n        blocks: [\n            [\n                0x3000,\n                0x30FF\n            ],\n            [\n                0x4E00,\n                0x9FAF\n            ],\n            [\n                0xFF00,\n                0xFF60\n            ] // Fullwidth punctuation\n        ]\n    },\n    {\n        // Korean\n        name: \"hangul\",\n        blocks: [\n            [\n                0xAC00,\n                0xD7AF\n            ]\n        ]\n    }\n];\n/**\n * Given a codepoint, return the name of the script or script family\n * it is from, or null if it is not part of a known block\n */ function scriptFromCodepoint(codepoint) {\n    for(var i = 0; i < scriptData.length; i++){\n        var script = scriptData[i];\n        for(var _i = 0; _i < script.blocks.length; _i++){\n            var block = script.blocks[_i];\n            if (codepoint >= block[0] && codepoint <= block[1]) {\n                return script.name;\n            }\n        }\n    }\n    return null;\n}\n/**\n * A flattened version of all the supported blocks in a single array.\n * This is an optimization to make supportedCodepoint() fast.\n */ var allBlocks = [];\nscriptData.forEach((s)=>s.blocks.forEach((b)=>allBlocks.push(...b)));\n/**\n * Given a codepoint, return true if it falls within one of the\n * scripts or script families defined above and false otherwise.\n *\n * Micro benchmarks shows that this is faster than\n * /[\\u3000-\\u30FF\\u4E00-\\u9FAF\\uFF00-\\uFF60\\uAC00-\\uD7AF\\u0900-\\u109F]/.test()\n * in Firefox, Chrome and Node.\n */ function supportedCodepoint(codepoint) {\n    for(var i = 0; i < allBlocks.length; i += 2){\n        if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {\n            return true;\n        }\n    }\n    return false;\n}\n/**\n * This file provides support to domTree.js and delimiter.js.\n * It's a storehouse of path geometry for SVG images.\n */ // In all paths below, the viewBox-to-em scale is 1000:1.\nvar hLinePad = 80; // padding above a sqrt vinculum. Prevents image cropping.\n// The vinculum of a \\sqrt can be made thicker by a KaTeX rendering option.\n// Think of variable extraVinculum as two detours in the SVG path.\n// The detour begins at the lower left of the area labeled extraVinculum below.\n// The detour proceeds one extraVinculum distance up and slightly to the right,\n// displacing the radiused corner between surd and vinculum. The radius is\n// traversed as usual, then the detour resumes. It goes right, to the end of\n// the very long vinculum, then down one extraVinculum distance,\n// after which it resumes regular path geometry for the radical.\n/*                                                  vinculum\n                                                   /\n         /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraVinculum\n        / █████████████████████←0.04em (40 unit) std vinculum thickness\n       / /\n      / /\n     / /\\\n    / / surd\n*/ var sqrtMain = function sqrtMain(extraVinculum, hLinePad) {\n    // sqrtMain path geometry is from glyph U221A in the font KaTeX Main\n    return \"M95,\" + (622 + extraVinculum + hLinePad) + \"\\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\\nc69,-144,104.5,-217.7,106.5,-221\\nl\" + extraVinculum / 2.075 + \" -\" + extraVinculum + \"\\nc5.3,-9.3,12,-14,20,-14\\nH400000v\" + (40 + extraVinculum) + \"H845.2724\\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\\nM\" + (834 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\nvar sqrtSize1 = function sqrtSize1(extraVinculum, hLinePad) {\n    // size1 is from glyph U221A in the font KaTeX_Size1-Regular\n    return \"M263,\" + (601 + extraVinculum + hLinePad) + \"c0.7,0,18,39.7,52,119\\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\\nc340,-704.7,510.7,-1060.3,512,-1067\\nl\" + extraVinculum / 2.084 + \" -\" + extraVinculum + \"\\nc4.7,-7.3,11,-11,19,-11\\nH40000v\" + (40 + extraVinculum) + \"H1012.3\\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\nvar sqrtSize2 = function sqrtSize2(extraVinculum, hLinePad) {\n    // size2 is from glyph U221A in the font KaTeX_Size2-Regular\n    return \"M983 \" + (10 + extraVinculum + hLinePad) + \"\\nl\" + extraVinculum / 3.13 + \" -\" + extraVinculum + \"\\nc4,-6.7,10,-10,18,-10 H400000v\" + (40 + extraVinculum) + \"\\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\nvar sqrtSize3 = function sqrtSize3(extraVinculum, hLinePad) {\n    // size3 is from glyph U221A in the font KaTeX_Size3-Regular\n    return \"M424,\" + (2398 + extraVinculum + hLinePad) + \"\\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\\nl\" + extraVinculum / 4.223 + \" -\" + extraVinculum + \"c4,-6.7,10,-10,18,-10 H400000\\nv\" + (40 + extraVinculum) + \"H1014.6\\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\\nc-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2z M\" + (1001 + extraVinculum) + \" \" + hLinePad + \"\\nh400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\nvar sqrtSize4 = function sqrtSize4(extraVinculum, hLinePad) {\n    // size4 is from glyph U221A in the font KaTeX_Size4-Regular\n    return \"M473,\" + (2713 + extraVinculum + hLinePad) + \"\\nc339.3,-1799.3,509.3,-2700,510,-2702 l\" + extraVinculum / 5.298 + \" -\" + extraVinculum + \"\\nc3.3,-7.3,9.3,-11,18,-11 H400000v\" + (40 + extraVinculum) + \"H1017.7\\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\\n606zM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"H1017.7z\";\n};\nvar phasePath = function phasePath(y) {\n    var x = y / 2; // x coordinate at top of angle\n    return \"M400000 \" + y + \" H0 L\" + x + \" 0 l65 45 L145 \" + (y - 80) + \" H400000z\";\n};\nvar sqrtTall = function sqrtTall(extraVinculum, hLinePad, viewBoxHeight) {\n    // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular\n    // One path edge has a variable length. It runs vertically from the vinculum\n    // to a point near (14 units) the bottom of the surd. The vinculum\n    // is normally 40 units thick. So the length of the line in question is:\n    var vertSegment = viewBoxHeight - 54 - hLinePad - extraVinculum;\n    return \"M702 \" + (extraVinculum + hLinePad) + \"H400000\" + (40 + extraVinculum) + \"\\nH742v\" + vertSegment + \"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\\n219 661 l218 661zM702 \" + hLinePad + \"H400000v\" + (40 + extraVinculum) + \"H742z\";\n};\nvar sqrtPath = function sqrtPath(size, extraVinculum, viewBoxHeight) {\n    extraVinculum = 1000 * extraVinculum; // Convert from document ems to viewBox.\n    var path = \"\";\n    switch(size){\n        case \"sqrtMain\":\n            path = sqrtMain(extraVinculum, hLinePad);\n            break;\n        case \"sqrtSize1\":\n            path = sqrtSize1(extraVinculum, hLinePad);\n            break;\n        case \"sqrtSize2\":\n            path = sqrtSize2(extraVinculum, hLinePad);\n            break;\n        case \"sqrtSize3\":\n            path = sqrtSize3(extraVinculum, hLinePad);\n            break;\n        case \"sqrtSize4\":\n            path = sqrtSize4(extraVinculum, hLinePad);\n            break;\n        case \"sqrtTall\":\n            path = sqrtTall(extraVinculum, hLinePad, viewBoxHeight);\n    }\n    return path;\n};\nvar innerPath = function innerPath(name, height) {\n    // The inner part of stretchy tall delimiters\n    switch(name){\n        case \"⎜\":\n            return \"M291 0 H417 V\" + height + \" H291z M291 0 H417 V\" + height + \" H291z\";\n        case \"∣\":\n            return \"M145 0 H188 V\" + height + \" H145z M145 0 H188 V\" + height + \" H145z\";\n        case \"∥\":\n            return \"M145 0 H188 V\" + height + \" H145z M145 0 H188 V\" + height + \" H145z\" + (\"M367 0 H410 V\" + height + \" H367z M367 0 H410 V\" + height + \" H367z\");\n        case \"⎟\":\n            return \"M457 0 H583 V\" + height + \" H457z M457 0 H583 V\" + height + \" H457z\";\n        case \"⎢\":\n            return \"M319 0 H403 V\" + height + \" H319z M319 0 H403 V\" + height + \" H319z\";\n        case \"⎥\":\n            return \"M263 0 H347 V\" + height + \" H263z M263 0 H347 V\" + height + \" H263z\";\n        case \"⎪\":\n            return \"M384 0 H504 V\" + height + \" H384z M384 0 H504 V\" + height + \" H384z\";\n        case \"⏐\":\n            return \"M312 0 H355 V\" + height + \" H312z M312 0 H355 V\" + height + \" H312z\";\n        case \"‖\":\n            return \"M257 0 H300 V\" + height + \" H257z M257 0 H300 V\" + height + \" H257z\" + (\"M478 0 H521 V\" + height + \" H478z M478 0 H521 V\" + height + \" H478z\");\n        default:\n            return \"\";\n    }\n};\nvar path = {\n    // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main\n    doubleleftarrow: \"M262 157\\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\\nm8 0v40h399730v-40zm0 194v40h399730v-40z\",\n    // doublerightarrow is from glyph U+21D2 in font KaTeX Main\n    doublerightarrow: \"M399738 392l\\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z\",\n    // leftarrow is from glyph U+2190 in font KaTeX Main\n    leftarrow: \"M400000 241H110l3-3c68.7-52.7 113.7-120\\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\\n l-3-3h399890zM100 241v40h399900v-40z\",\n    // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular\n    leftbrace: \"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z\",\n    leftbraceunder: \"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z\",\n    // overgroup is from the MnSymbol package (public domain)\n    leftgroup: \"M400000 80\\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\\n 435 0h399565z\",\n    leftgroupunder: \"M400000 262\\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\\n 435 219h399565z\",\n    // Harpoons are from glyph U+21BD in font KaTeX Main\n    leftharpoon: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z\",\n    leftharpoonplus: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\\nm0 0v40h400000v-40z\",\n    leftharpoondown: \"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z\",\n    leftharpoondownplus: \"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z\",\n    // hook is from glyph U+21A9 in font KaTeX Main\n    lefthook: \"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\\n 71.5 23h399859zM103 281v-40h399897v40z\",\n    leftlinesegment: \"M40 281 V428 H0 V94 H40 V241 H400000 v40z\\nM40 281 V428 H0 V94 H40 V241 H400000 v40z\",\n    leftmapsto: \"M40 281 V448H0V74H40V241H400000v40z\\nM40 281 V448H0V74H40V241H400000v40z\",\n    // tofrom is from glyph U+21C4 in font KaTeX AMS Regular\n    leftToFrom: \"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z\",\n    longequal: \"M0 50 h400000 v40H0z m0 194h40000v40H0z\\nM0 50 h400000 v40H0z m0 194h40000v40H0z\",\n    midbrace: \"M200428 334\\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z\",\n    midbraceunder: \"M199572 214\\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z\",\n    oiintSize1: \"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z\",\n    oiintSize2: \"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\\nc0 110 84 276 504 276s502.4-166 502.4-276z\",\n    oiiintSize1: \"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z\",\n    oiiintSize2: \"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z\",\n    rightarrow: \"M0 241v40h399891c-47.3 35.3-84 78-110 128\\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n 151.7 139 205zm0 0v40h399900v-40z\",\n    rightbrace: \"M400000 542l\\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z\",\n    rightbraceunder: \"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z\",\n    rightgroup: \"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\\n 3-1 3-3v-38c-76-158-257-219-435-219H0z\",\n    rightgroupunder: \"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z\",\n    rightharpoon: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\\n 69.2 92 94.5zm0 0v40h399900v-40z\",\n    rightharpoonplus: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z\",\n    rightharpoondown: \"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z\",\n    rightharpoondownplus: \"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\\nm0-194v40h400000v-40zm0 0v40h400000v-40z\",\n    righthook: \"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z\",\n    rightlinesegment: \"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z\",\n    rightToFrom: \"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z\",\n    // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular\n    twoheadleftarrow: \"M0 167c68 40\\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z\",\n    twoheadrightarrow: \"M400000 167\\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z\",\n    // tilde1 is a modified version of a glyph from the MnSymbol package\n    tilde1: \"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\\n-68.267.847-113-73.952-191-73.952z\",\n    // ditto tilde2, tilde3, & tilde4\n    tilde2: \"M344 55.266c-142 0-300.638 81.316-311.5 86.418\\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z\",\n    tilde3: \"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\\n -338 0-409-156.573-744-156.573z\",\n    tilde4: \"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\\n -175.236-744-175.236z\",\n    // vec is from glyph U+20D7 in font KaTeX Main\n    vec: \"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\\nc-16-25.333-24-45-24-59z\",\n    // widehat1 is a modified version of a glyph from the MnSymbol package\n    widehat1: \"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z\",\n    // ditto widehat2, widehat3, & widehat4\n    widehat2: \"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n    widehat3: \"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n    widehat4: \"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n    // widecheck paths are all inverted versions of widehat\n    widecheck1: \"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z\",\n    widecheck2: \"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n    widecheck3: \"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n    widecheck4: \"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n    // The next ten paths support reaction arrows from the mhchem package.\n    // Arrows for \\ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX\n    // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main\n    baraboveleftarrow: \"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z\",\n    // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main\n    rightarrowabovebar: \"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z\",\n    // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.\n    // Ref from mhchem.sty: \\rlap{\\raisebox{-.22ex}{$\\kern0.5em\n    baraboveshortleftharpoon: \"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z\",\n    rightharpoonaboveshortbar: \"M0,241 l0,40c399126,0,399993,0,399993,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z\",\n    shortbaraboveleftharpoon: \"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z\",\n    shortrightharpoonabovebar: \"M53,241l0,40c398570,0,399437,0,399437,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z\"\n};\nvar tallDelim = function tallDelim(label, midHeight) {\n    switch(label){\n        case \"lbrack\":\n            return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v1759 h347 v-84\\nH403z M403 1759 V0 H319 V1759 v\" + midHeight + \" v1759 h84z\";\n        case \"rbrack\":\n            return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v1759 H0 v84 H347z\\nM347 1759 V0 H263 V1759 v\" + midHeight + \" v1759 h84z\";\n        case \"vert\":\n            return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\";\n        case \"doublevert\":\n            return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\\nM367 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v\" + midHeight + \" v585 h43z\";\n        case \"lfloor\":\n            return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1715 h263 v84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n        case \"rfloor\":\n            return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1799 H0 v-84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n        case \"lceil\":\n            return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v602 h84z\\nM403 1759 V0 H319 V1759 v\" + midHeight + \" v602 h84z\";\n        case \"rceil\":\n            return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v602 h84z\\nM347 1759 V0 h-84 V1759 v\" + midHeight + \" v602 h84z\";\n        case \"lparen\":\n            return \"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\\n-36,557 l0,\" + (midHeight + 84) + \"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\\nl0,-\" + (midHeight + 92) + \"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z\";\n        case \"rparen\":\n            return \"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,\" + (midHeight + 9) + \"\\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\\nl0,-\" + (midHeight + 144) + \"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z\";\n        default:\n            // We should not ever get here.\n            throw new Error(\"Unknown stretchy delimiter.\");\n    }\n};\n/**\n * This node represents a document fragment, which contains elements, but when\n * placed into the DOM doesn't have any representation itself. It only contains\n * children and doesn't have any DOM node properties.\n */ class DocumentFragment {\n    // HtmlDomNode\n    // Never used; needed for satisfying interface.\n    constructor(children){\n        this.children = void 0;\n        this.classes = void 0;\n        this.height = void 0;\n        this.depth = void 0;\n        this.maxFontSize = void 0;\n        this.style = void 0;\n        this.children = children;\n        this.classes = [];\n        this.height = 0;\n        this.depth = 0;\n        this.maxFontSize = 0;\n        this.style = {};\n    }\n    hasClass(className) {\n        return utils.contains(this.classes, className);\n    }\n    /** Convert the fragment into a node. */ toNode() {\n        var frag = document.createDocumentFragment();\n        for(var i = 0; i < this.children.length; i++){\n            frag.appendChild(this.children[i].toNode());\n        }\n        return frag;\n    }\n    /** Convert the fragment into HTML markup. */ toMarkup() {\n        var markup = \"\"; // Simply concatenate the markup for the children together.\n        for(var i = 0; i < this.children.length; i++){\n            markup += this.children[i].toMarkup();\n        }\n        return markup;\n    }\n    /**\n   * Converts the math node into a string, similar to innerText. Applies to\n   * MathDomNode's only.\n   */ toText() {\n        // To avoid this, we would subclass documentFragment separately for\n        // MathML, but polyfills for subclassing is expensive per PR 1469.\n        // $FlowFixMe: Only works for ChildType = MathDomNode.\n        var toText = (child)=>child.toText();\n        return this.children.map(toText).join(\"\");\n    }\n}\n// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY.\nvar fontMetricsData = {\n    \"AMS-Regular\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"65\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.72222\n        ],\n        \"66\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.66667\n        ],\n        \"67\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.72222\n        ],\n        \"68\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.72222\n        ],\n        \"69\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.66667\n        ],\n        \"70\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.61111\n        ],\n        \"71\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.77778\n        ],\n        \"72\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.77778\n        ],\n        \"73\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.38889\n        ],\n        \"74\": [\n            0.16667,\n            0.68889,\n            0,\n            0,\n            0.5\n        ],\n        \"75\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.77778\n        ],\n        \"76\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.66667\n        ],\n        \"77\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.94445\n        ],\n        \"78\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.72222\n        ],\n        \"79\": [\n            0.16667,\n            0.68889,\n            0,\n            0,\n            0.77778\n        ],\n        \"80\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.61111\n        ],\n        \"81\": [\n            0.16667,\n            0.68889,\n            0,\n            0,\n            0.77778\n        ],\n        \"82\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.72222\n        ],\n        \"83\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.55556\n        ],\n        \"84\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.66667\n        ],\n        \"85\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.72222\n        ],\n        \"86\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.72222\n        ],\n        \"87\": [\n            0,\n            0.68889,\n            0,\n            0,\n            1.0\n        ],\n        \"88\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.72222\n        ],\n        \"89\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.72222\n        ],\n        \"90\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.66667\n        ],\n        \"107\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.55556\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"165\": [\n            0,\n            0.675,\n            0.025,\n            0,\n            0.75\n        ],\n        \"174\": [\n            0.15559,\n            0.69224,\n            0,\n            0,\n            0.94666\n        ],\n        \"240\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.55556\n        ],\n        \"295\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.54028\n        ],\n        \"710\": [\n            0,\n            0.825,\n            0,\n            0,\n            2.33334\n        ],\n        \"732\": [\n            0,\n            0.9,\n            0,\n            0,\n            2.33334\n        ],\n        \"770\": [\n            0,\n            0.825,\n            0,\n            0,\n            2.33334\n        ],\n        \"771\": [\n            0,\n            0.9,\n            0,\n            0,\n            2.33334\n        ],\n        \"989\": [\n            0.08167,\n            0.58167,\n            0,\n            0,\n            0.77778\n        ],\n        \"1008\": [\n            0,\n            0.43056,\n            0.04028,\n            0,\n            0.66667\n        ],\n        \"8245\": [\n            0,\n            0.54986,\n            0,\n            0,\n            0.275\n        ],\n        \"8463\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.54028\n        ],\n        \"8487\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.72222\n        ],\n        \"8498\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.55556\n        ],\n        \"8502\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.66667\n        ],\n        \"8503\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.44445\n        ],\n        \"8504\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.66667\n        ],\n        \"8513\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.63889\n        ],\n        \"8592\": [\n            -0.03598,\n            0.46402,\n            0,\n            0,\n            0.5\n        ],\n        \"8594\": [\n            -0.03598,\n            0.46402,\n            0,\n            0,\n            0.5\n        ],\n        \"8602\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8603\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8606\": [\n            0.01354,\n            0.52239,\n            0,\n            0,\n            1.0\n        ],\n        \"8608\": [\n            0.01354,\n            0.52239,\n            0,\n            0,\n            1.0\n        ],\n        \"8610\": [\n            0.01354,\n            0.52239,\n            0,\n            0,\n            1.11111\n        ],\n        \"8611\": [\n            0.01354,\n            0.52239,\n            0,\n            0,\n            1.11111\n        ],\n        \"8619\": [\n            0,\n            0.54986,\n            0,\n            0,\n            1.0\n        ],\n        \"8620\": [\n            0,\n            0.54986,\n            0,\n            0,\n            1.0\n        ],\n        \"8621\": [\n            -0.13313,\n            0.37788,\n            0,\n            0,\n            1.38889\n        ],\n        \"8622\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8624\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.5\n        ],\n        \"8625\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.5\n        ],\n        \"8630\": [\n            0,\n            0.43056,\n            0,\n            0,\n            1.0\n        ],\n        \"8631\": [\n            0,\n            0.43056,\n            0,\n            0,\n            1.0\n        ],\n        \"8634\": [\n            0.08198,\n            0.58198,\n            0,\n            0,\n            0.77778\n        ],\n        \"8635\": [\n            0.08198,\n            0.58198,\n            0,\n            0,\n            0.77778\n        ],\n        \"8638\": [\n            0.19444,\n            0.69224,\n            0,\n            0,\n            0.41667\n        ],\n        \"8639\": [\n            0.19444,\n            0.69224,\n            0,\n            0,\n            0.41667\n        ],\n        \"8642\": [\n            0.19444,\n            0.69224,\n            0,\n            0,\n            0.41667\n        ],\n        \"8643\": [\n            0.19444,\n            0.69224,\n            0,\n            0,\n            0.41667\n        ],\n        \"8644\": [\n            0.1808,\n            0.675,\n            0,\n            0,\n            1.0\n        ],\n        \"8646\": [\n            0.1808,\n            0.675,\n            0,\n            0,\n            1.0\n        ],\n        \"8647\": [\n            0.1808,\n            0.675,\n            0,\n            0,\n            1.0\n        ],\n        \"8648\": [\n            0.19444,\n            0.69224,\n            0,\n            0,\n            0.83334\n        ],\n        \"8649\": [\n            0.1808,\n            0.675,\n            0,\n            0,\n            1.0\n        ],\n        \"8650\": [\n            0.19444,\n            0.69224,\n            0,\n            0,\n            0.83334\n        ],\n        \"8651\": [\n            0.01354,\n            0.52239,\n            0,\n            0,\n            1.0\n        ],\n        \"8652\": [\n            0.01354,\n            0.52239,\n            0,\n            0,\n            1.0\n        ],\n        \"8653\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8654\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8655\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8666\": [\n            0.13667,\n            0.63667,\n            0,\n            0,\n            1.0\n        ],\n        \"8667\": [\n            0.13667,\n            0.63667,\n            0,\n            0,\n            1.0\n        ],\n        \"8669\": [\n            -0.13313,\n            0.37788,\n            0,\n            0,\n            1.0\n        ],\n        \"8672\": [\n            -0.064,\n            0.437,\n            0,\n            0,\n            1.334\n        ],\n        \"8674\": [\n            -0.064,\n            0.437,\n            0,\n            0,\n            1.334\n        ],\n        \"8705\": [\n            0,\n            0.825,\n            0,\n            0,\n            0.5\n        ],\n        \"8708\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.55556\n        ],\n        \"8709\": [\n            0.08167,\n            0.58167,\n            0,\n            0,\n            0.77778\n        ],\n        \"8717\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.42917\n        ],\n        \"8722\": [\n            -0.03598,\n            0.46402,\n            0,\n            0,\n            0.5\n        ],\n        \"8724\": [\n            0.08198,\n            0.69224,\n            0,\n            0,\n            0.77778\n        ],\n        \"8726\": [\n            0.08167,\n            0.58167,\n            0,\n            0,\n            0.77778\n        ],\n        \"8733\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.77778\n        ],\n        \"8736\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.72222\n        ],\n        \"8737\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.72222\n        ],\n        \"8738\": [\n            0.03517,\n            0.52239,\n            0,\n            0,\n            0.72222\n        ],\n        \"8739\": [\n            0.08167,\n            0.58167,\n            0,\n            0,\n            0.22222\n        ],\n        \"8740\": [\n            0.25142,\n            0.74111,\n            0,\n            0,\n            0.27778\n        ],\n        \"8741\": [\n            0.08167,\n            0.58167,\n            0,\n            0,\n            0.38889\n        ],\n        \"8742\": [\n            0.25142,\n            0.74111,\n            0,\n            0,\n            0.5\n        ],\n        \"8756\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.66667\n        ],\n        \"8757\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.66667\n        ],\n        \"8764\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            0.77778\n        ],\n        \"8765\": [\n            -0.13313,\n            0.37788,\n            0,\n            0,\n            0.77778\n        ],\n        \"8769\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            0.77778\n        ],\n        \"8770\": [\n            -0.03625,\n            0.46375,\n            0,\n            0,\n            0.77778\n        ],\n        \"8774\": [\n            0.30274,\n            0.79383,\n            0,\n            0,\n            0.77778\n        ],\n        \"8776\": [\n            -0.01688,\n            0.48312,\n            0,\n            0,\n            0.77778\n        ],\n        \"8778\": [\n            0.08167,\n            0.58167,\n            0,\n            0,\n            0.77778\n        ],\n        \"8782\": [\n            0.06062,\n            0.54986,\n            0,\n            0,\n            0.77778\n        ],\n        \"8783\": [\n            0.06062,\n            0.54986,\n            0,\n            0,\n            0.77778\n        ],\n        \"8785\": [\n            0.08198,\n            0.58198,\n            0,\n            0,\n            0.77778\n        ],\n        \"8786\": [\n            0.08198,\n            0.58198,\n            0,\n            0,\n            0.77778\n        ],\n        \"8787\": [\n            0.08198,\n            0.58198,\n            0,\n            0,\n            0.77778\n        ],\n        \"8790\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.77778\n        ],\n        \"8791\": [\n            0.22958,\n            0.72958,\n            0,\n            0,\n            0.77778\n        ],\n        \"8796\": [\n            0.08198,\n            0.91667,\n            0,\n            0,\n            0.77778\n        ],\n        \"8806\": [\n            0.25583,\n            0.75583,\n            0,\n            0,\n            0.77778\n        ],\n        \"8807\": [\n            0.25583,\n            0.75583,\n            0,\n            0,\n            0.77778\n        ],\n        \"8808\": [\n            0.25142,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"8809\": [\n            0.25142,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"8812\": [\n            0.25583,\n            0.75583,\n            0,\n            0,\n            0.5\n        ],\n        \"8814\": [\n            0.20576,\n            0.70576,\n            0,\n            0,\n            0.77778\n        ],\n        \"8815\": [\n            0.20576,\n            0.70576,\n            0,\n            0,\n            0.77778\n        ],\n        \"8816\": [\n            0.30274,\n            0.79383,\n            0,\n            0,\n            0.77778\n        ],\n        \"8817\": [\n            0.30274,\n            0.79383,\n            0,\n            0,\n            0.77778\n        ],\n        \"8818\": [\n            0.22958,\n            0.72958,\n            0,\n            0,\n            0.77778\n        ],\n        \"8819\": [\n            0.22958,\n            0.72958,\n            0,\n            0,\n            0.77778\n        ],\n        \"8822\": [\n            0.1808,\n            0.675,\n            0,\n            0,\n            0.77778\n        ],\n        \"8823\": [\n            0.1808,\n            0.675,\n            0,\n            0,\n            0.77778\n        ],\n        \"8828\": [\n            0.13667,\n            0.63667,\n            0,\n            0,\n            0.77778\n        ],\n        \"8829\": [\n            0.13667,\n            0.63667,\n            0,\n            0,\n            0.77778\n        ],\n        \"8830\": [\n            0.22958,\n            0.72958,\n            0,\n            0,\n            0.77778\n        ],\n        \"8831\": [\n            0.22958,\n            0.72958,\n            0,\n            0,\n            0.77778\n        ],\n        \"8832\": [\n            0.20576,\n            0.70576,\n            0,\n            0,\n            0.77778\n        ],\n        \"8833\": [\n            0.20576,\n            0.70576,\n            0,\n            0,\n            0.77778\n        ],\n        \"8840\": [\n            0.30274,\n            0.79383,\n            0,\n            0,\n            0.77778\n        ],\n        \"8841\": [\n            0.30274,\n            0.79383,\n            0,\n            0,\n            0.77778\n        ],\n        \"8842\": [\n            0.13597,\n            0.63597,\n            0,\n            0,\n            0.77778\n        ],\n        \"8843\": [\n            0.13597,\n            0.63597,\n            0,\n            0,\n            0.77778\n        ],\n        \"8847\": [\n            0.03517,\n            0.54986,\n            0,\n            0,\n            0.77778\n        ],\n        \"8848\": [\n            0.03517,\n            0.54986,\n            0,\n            0,\n            0.77778\n        ],\n        \"8858\": [\n            0.08198,\n            0.58198,\n            0,\n            0,\n            0.77778\n        ],\n        \"8859\": [\n            0.08198,\n            0.58198,\n            0,\n            0,\n            0.77778\n        ],\n        \"8861\": [\n            0.08198,\n            0.58198,\n            0,\n            0,\n            0.77778\n        ],\n        \"8862\": [\n            0,\n            0.675,\n            0,\n            0,\n            0.77778\n        ],\n        \"8863\": [\n            0,\n            0.675,\n            0,\n            0,\n            0.77778\n        ],\n        \"8864\": [\n            0,\n            0.675,\n            0,\n            0,\n            0.77778\n        ],\n        \"8865\": [\n            0,\n            0.675,\n            0,\n            0,\n            0.77778\n        ],\n        \"8872\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.61111\n        ],\n        \"8873\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.72222\n        ],\n        \"8874\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.88889\n        ],\n        \"8876\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.61111\n        ],\n        \"8877\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.61111\n        ],\n        \"8878\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.72222\n        ],\n        \"8879\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.72222\n        ],\n        \"8882\": [\n            0.03517,\n            0.54986,\n            0,\n            0,\n            0.77778\n        ],\n        \"8883\": [\n            0.03517,\n            0.54986,\n            0,\n            0,\n            0.77778\n        ],\n        \"8884\": [\n            0.13667,\n            0.63667,\n            0,\n            0,\n            0.77778\n        ],\n        \"8885\": [\n            0.13667,\n            0.63667,\n            0,\n            0,\n            0.77778\n        ],\n        \"8888\": [\n            0,\n            0.54986,\n            0,\n            0,\n            1.11111\n        ],\n        \"8890\": [\n            0.19444,\n            0.43056,\n            0,\n            0,\n            0.55556\n        ],\n        \"8891\": [\n            0.19444,\n            0.69224,\n            0,\n            0,\n            0.61111\n        ],\n        \"8892\": [\n            0.19444,\n            0.69224,\n            0,\n            0,\n            0.61111\n        ],\n        \"8901\": [\n            0,\n            0.54986,\n            0,\n            0,\n            0.27778\n        ],\n        \"8903\": [\n            0.08167,\n            0.58167,\n            0,\n            0,\n            0.77778\n        ],\n        \"8905\": [\n            0.08167,\n            0.58167,\n            0,\n            0,\n            0.77778\n        ],\n        \"8906\": [\n            0.08167,\n            0.58167,\n            0,\n            0,\n            0.77778\n        ],\n        \"8907\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.77778\n        ],\n        \"8908\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.77778\n        ],\n        \"8909\": [\n            -0.03598,\n            0.46402,\n            0,\n            0,\n            0.77778\n        ],\n        \"8910\": [\n            0,\n            0.54986,\n            0,\n            0,\n            0.76042\n        ],\n        \"8911\": [\n            0,\n            0.54986,\n            0,\n            0,\n            0.76042\n        ],\n        \"8912\": [\n            0.03517,\n            0.54986,\n            0,\n            0,\n            0.77778\n        ],\n        \"8913\": [\n            0.03517,\n            0.54986,\n            0,\n            0,\n            0.77778\n        ],\n        \"8914\": [\n            0,\n            0.54986,\n            0,\n            0,\n            0.66667\n        ],\n        \"8915\": [\n            0,\n            0.54986,\n            0,\n            0,\n            0.66667\n        ],\n        \"8916\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.66667\n        ],\n        \"8918\": [\n            0.0391,\n            0.5391,\n            0,\n            0,\n            0.77778\n        ],\n        \"8919\": [\n            0.0391,\n            0.5391,\n            0,\n            0,\n            0.77778\n        ],\n        \"8920\": [\n            0.03517,\n            0.54986,\n            0,\n            0,\n            1.33334\n        ],\n        \"8921\": [\n            0.03517,\n            0.54986,\n            0,\n            0,\n            1.33334\n        ],\n        \"8922\": [\n            0.38569,\n            0.88569,\n            0,\n            0,\n            0.77778\n        ],\n        \"8923\": [\n            0.38569,\n            0.88569,\n            0,\n            0,\n            0.77778\n        ],\n        \"8926\": [\n            0.13667,\n            0.63667,\n            0,\n            0,\n            0.77778\n        ],\n        \"8927\": [\n            0.13667,\n            0.63667,\n            0,\n            0,\n            0.77778\n        ],\n        \"8928\": [\n            0.30274,\n            0.79383,\n            0,\n            0,\n            0.77778\n        ],\n        \"8929\": [\n            0.30274,\n            0.79383,\n            0,\n            0,\n            0.77778\n        ],\n        \"8934\": [\n            0.23222,\n            0.74111,\n            0,\n            0,\n            0.77778\n        ],\n        \"8935\": [\n            0.23222,\n            0.74111,\n            0,\n            0,\n            0.77778\n        ],\n        \"8936\": [\n            0.23222,\n            0.74111,\n            0,\n            0,\n            0.77778\n        ],\n        \"8937\": [\n            0.23222,\n            0.74111,\n            0,\n            0,\n            0.77778\n        ],\n        \"8938\": [\n            0.20576,\n            0.70576,\n            0,\n            0,\n            0.77778\n        ],\n        \"8939\": [\n            0.20576,\n            0.70576,\n            0,\n            0,\n            0.77778\n        ],\n        \"8940\": [\n            0.30274,\n            0.79383,\n            0,\n            0,\n            0.77778\n        ],\n        \"8941\": [\n            0.30274,\n            0.79383,\n            0,\n            0,\n            0.77778\n        ],\n        \"8994\": [\n            0.19444,\n            0.69224,\n            0,\n            0,\n            0.77778\n        ],\n        \"8995\": [\n            0.19444,\n            0.69224,\n            0,\n            0,\n            0.77778\n        ],\n        \"9416\": [\n            0.15559,\n            0.69224,\n            0,\n            0,\n            0.90222\n        ],\n        \"9484\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.5\n        ],\n        \"9488\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.5\n        ],\n        \"9492\": [\n            0,\n            0.37788,\n            0,\n            0,\n            0.5\n        ],\n        \"9496\": [\n            0,\n            0.37788,\n            0,\n            0,\n            0.5\n        ],\n        \"9585\": [\n            0.19444,\n            0.68889,\n            0,\n            0,\n            0.88889\n        ],\n        \"9586\": [\n            0.19444,\n            0.74111,\n            0,\n            0,\n            0.88889\n        ],\n        \"9632\": [\n            0,\n            0.675,\n            0,\n            0,\n            0.77778\n        ],\n        \"9633\": [\n            0,\n            0.675,\n            0,\n            0,\n            0.77778\n        ],\n        \"9650\": [\n            0,\n            0.54986,\n            0,\n            0,\n            0.72222\n        ],\n        \"9651\": [\n            0,\n            0.54986,\n            0,\n            0,\n            0.72222\n        ],\n        \"9654\": [\n            0.03517,\n            0.54986,\n            0,\n            0,\n            0.77778\n        ],\n        \"9660\": [\n            0,\n            0.54986,\n            0,\n            0,\n            0.72222\n        ],\n        \"9661\": [\n            0,\n            0.54986,\n            0,\n            0,\n            0.72222\n        ],\n        \"9664\": [\n            0.03517,\n            0.54986,\n            0,\n            0,\n            0.77778\n        ],\n        \"9674\": [\n            0.11111,\n            0.69224,\n            0,\n            0,\n            0.66667\n        ],\n        \"9733\": [\n            0.19444,\n            0.69224,\n            0,\n            0,\n            0.94445\n        ],\n        \"10003\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.83334\n        ],\n        \"10016\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.83334\n        ],\n        \"10731\": [\n            0.11111,\n            0.69224,\n            0,\n            0,\n            0.66667\n        ],\n        \"10846\": [\n            0.19444,\n            0.75583,\n            0,\n            0,\n            0.61111\n        ],\n        \"10877\": [\n            0.13667,\n            0.63667,\n            0,\n            0,\n            0.77778\n        ],\n        \"10878\": [\n            0.13667,\n            0.63667,\n            0,\n            0,\n            0.77778\n        ],\n        \"10885\": [\n            0.25583,\n            0.75583,\n            0,\n            0,\n            0.77778\n        ],\n        \"10886\": [\n            0.25583,\n            0.75583,\n            0,\n            0,\n            0.77778\n        ],\n        \"10887\": [\n            0.13597,\n            0.63597,\n            0,\n            0,\n            0.77778\n        ],\n        \"10888\": [\n            0.13597,\n            0.63597,\n            0,\n            0,\n            0.77778\n        ],\n        \"10889\": [\n            0.26167,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"10890\": [\n            0.26167,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"10891\": [\n            0.48256,\n            0.98256,\n            0,\n            0,\n            0.77778\n        ],\n        \"10892\": [\n            0.48256,\n            0.98256,\n            0,\n            0,\n            0.77778\n        ],\n        \"10901\": [\n            0.13667,\n            0.63667,\n            0,\n            0,\n            0.77778\n        ],\n        \"10902\": [\n            0.13667,\n            0.63667,\n            0,\n            0,\n            0.77778\n        ],\n        \"10933\": [\n            0.25142,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"10934\": [\n            0.25142,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"10935\": [\n            0.26167,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"10936\": [\n            0.26167,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"10937\": [\n            0.26167,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"10938\": [\n            0.26167,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"10949\": [\n            0.25583,\n            0.75583,\n            0,\n            0,\n            0.77778\n        ],\n        \"10950\": [\n            0.25583,\n            0.75583,\n            0,\n            0,\n            0.77778\n        ],\n        \"10955\": [\n            0.28481,\n            0.79383,\n            0,\n            0,\n            0.77778\n        ],\n        \"10956\": [\n            0.28481,\n            0.79383,\n            0,\n            0,\n            0.77778\n        ],\n        \"57350\": [\n            0.08167,\n            0.58167,\n            0,\n            0,\n            0.22222\n        ],\n        \"57351\": [\n            0.08167,\n            0.58167,\n            0,\n            0,\n            0.38889\n        ],\n        \"57352\": [\n            0.08167,\n            0.58167,\n            0,\n            0,\n            0.77778\n        ],\n        \"57353\": [\n            0,\n            0.43056,\n            0.04028,\n            0,\n            0.66667\n        ],\n        \"57356\": [\n            0.25142,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"57357\": [\n            0.25142,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"57358\": [\n            0.41951,\n            0.91951,\n            0,\n            0,\n            0.77778\n        ],\n        \"57359\": [\n            0.30274,\n            0.79383,\n            0,\n            0,\n            0.77778\n        ],\n        \"57360\": [\n            0.30274,\n            0.79383,\n            0,\n            0,\n            0.77778\n        ],\n        \"57361\": [\n            0.41951,\n            0.91951,\n            0,\n            0,\n            0.77778\n        ],\n        \"57366\": [\n            0.25142,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"57367\": [\n            0.25142,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"57368\": [\n            0.25142,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"57369\": [\n            0.25142,\n            0.75726,\n            0,\n            0,\n            0.77778\n        ],\n        \"57370\": [\n            0.13597,\n            0.63597,\n            0,\n            0,\n            0.77778\n        ],\n        \"57371\": [\n            0.13597,\n            0.63597,\n            0,\n            0,\n            0.77778\n        ]\n    },\n    \"Caligraphic-Regular\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"65\": [\n            0,\n            0.68333,\n            0,\n            0.19445,\n            0.79847\n        ],\n        \"66\": [\n            0,\n            0.68333,\n            0.03041,\n            0.13889,\n            0.65681\n        ],\n        \"67\": [\n            0,\n            0.68333,\n            0.05834,\n            0.13889,\n            0.52653\n        ],\n        \"68\": [\n            0,\n            0.68333,\n            0.02778,\n            0.08334,\n            0.77139\n        ],\n        \"69\": [\n            0,\n            0.68333,\n            0.08944,\n            0.11111,\n            0.52778\n        ],\n        \"70\": [\n            0,\n            0.68333,\n            0.09931,\n            0.11111,\n            0.71875\n        ],\n        \"71\": [\n            0.09722,\n            0.68333,\n            0.0593,\n            0.11111,\n            0.59487\n        ],\n        \"72\": [\n            0,\n            0.68333,\n            0.00965,\n            0.11111,\n            0.84452\n        ],\n        \"73\": [\n            0,\n            0.68333,\n            0.07382,\n            0,\n            0.54452\n        ],\n        \"74\": [\n            0.09722,\n            0.68333,\n            0.18472,\n            0.16667,\n            0.67778\n        ],\n        \"75\": [\n            0,\n            0.68333,\n            0.01445,\n            0.05556,\n            0.76195\n        ],\n        \"76\": [\n            0,\n            0.68333,\n            0,\n            0.13889,\n            0.68972\n        ],\n        \"77\": [\n            0,\n            0.68333,\n            0,\n            0.13889,\n            1.2009\n        ],\n        \"78\": [\n            0,\n            0.68333,\n            0.14736,\n            0.08334,\n            0.82049\n        ],\n        \"79\": [\n            0,\n            0.68333,\n            0.02778,\n            0.11111,\n            0.79611\n        ],\n        \"80\": [\n            0,\n            0.68333,\n            0.08222,\n            0.08334,\n            0.69556\n        ],\n        \"81\": [\n            0.09722,\n            0.68333,\n            0,\n            0.11111,\n            0.81667\n        ],\n        \"82\": [\n            0,\n            0.68333,\n            0,\n            0.08334,\n            0.8475\n        ],\n        \"83\": [\n            0,\n            0.68333,\n            0.075,\n            0.13889,\n            0.60556\n        ],\n        \"84\": [\n            0,\n            0.68333,\n            0.25417,\n            0,\n            0.54464\n        ],\n        \"85\": [\n            0,\n            0.68333,\n            0.09931,\n            0.08334,\n            0.62583\n        ],\n        \"86\": [\n            0,\n            0.68333,\n            0.08222,\n            0,\n            0.61278\n        ],\n        \"87\": [\n            0,\n            0.68333,\n            0.08222,\n            0.08334,\n            0.98778\n        ],\n        \"88\": [\n            0,\n            0.68333,\n            0.14643,\n            0.13889,\n            0.7133\n        ],\n        \"89\": [\n            0.09722,\n            0.68333,\n            0.08222,\n            0.08334,\n            0.66834\n        ],\n        \"90\": [\n            0,\n            0.68333,\n            0.07944,\n            0.13889,\n            0.72473\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ]\n    },\n    \"Fraktur-Regular\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"33\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.29574\n        ],\n        \"34\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.21471\n        ],\n        \"38\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.73786\n        ],\n        \"39\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.21201\n        ],\n        \"40\": [\n            0.24982,\n            0.74947,\n            0,\n            0,\n            0.38865\n        ],\n        \"41\": [\n            0.24982,\n            0.74947,\n            0,\n            0,\n            0.38865\n        ],\n        \"42\": [\n            0,\n            0.62119,\n            0,\n            0,\n            0.27764\n        ],\n        \"43\": [\n            0.08319,\n            0.58283,\n            0,\n            0,\n            0.75623\n        ],\n        \"44\": [\n            0,\n            0.10803,\n            0,\n            0,\n            0.27764\n        ],\n        \"45\": [\n            0.08319,\n            0.58283,\n            0,\n            0,\n            0.75623\n        ],\n        \"46\": [\n            0,\n            0.10803,\n            0,\n            0,\n            0.27764\n        ],\n        \"47\": [\n            0.24982,\n            0.74947,\n            0,\n            0,\n            0.50181\n        ],\n        \"48\": [\n            0,\n            0.47534,\n            0,\n            0,\n            0.50181\n        ],\n        \"49\": [\n            0,\n            0.47534,\n            0,\n            0,\n            0.50181\n        ],\n        \"50\": [\n            0,\n            0.47534,\n            0,\n            0,\n            0.50181\n        ],\n        \"51\": [\n            0.18906,\n            0.47534,\n            0,\n            0,\n            0.50181\n        ],\n        \"52\": [\n            0.18906,\n            0.47534,\n            0,\n            0,\n            0.50181\n        ],\n        \"53\": [\n            0.18906,\n            0.47534,\n            0,\n            0,\n            0.50181\n        ],\n        \"54\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.50181\n        ],\n        \"55\": [\n            0.18906,\n            0.47534,\n            0,\n            0,\n            0.50181\n        ],\n        \"56\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.50181\n        ],\n        \"57\": [\n            0.18906,\n            0.47534,\n            0,\n            0,\n            0.50181\n        ],\n        \"58\": [\n            0,\n            0.47534,\n            0,\n            0,\n            0.21606\n        ],\n        \"59\": [\n            0.12604,\n            0.47534,\n            0,\n            0,\n            0.21606\n        ],\n        \"61\": [\n            -0.13099,\n            0.36866,\n            0,\n            0,\n            0.75623\n        ],\n        \"63\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.36245\n        ],\n        \"65\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.7176\n        ],\n        \"66\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.88397\n        ],\n        \"67\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.61254\n        ],\n        \"68\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.83158\n        ],\n        \"69\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.66278\n        ],\n        \"70\": [\n            0.12604,\n            0.69141,\n            0,\n            0,\n            0.61119\n        ],\n        \"71\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.78539\n        ],\n        \"72\": [\n            0.06302,\n            0.69141,\n            0,\n            0,\n            0.7203\n        ],\n        \"73\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.55448\n        ],\n        \"74\": [\n            0.12604,\n            0.69141,\n            0,\n            0,\n            0.55231\n        ],\n        \"75\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.66845\n        ],\n        \"76\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.66602\n        ],\n        \"77\": [\n            0,\n            0.69141,\n            0,\n            0,\n            1.04953\n        ],\n        \"78\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.83212\n        ],\n        \"79\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.82699\n        ],\n        \"80\": [\n            0.18906,\n            0.69141,\n            0,\n            0,\n            0.82753\n        ],\n        \"81\": [\n            0.03781,\n            0.69141,\n            0,\n            0,\n            0.82699\n        ],\n        \"82\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.82807\n        ],\n        \"83\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.82861\n        ],\n        \"84\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.66899\n        ],\n        \"85\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.64576\n        ],\n        \"86\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.83131\n        ],\n        \"87\": [\n            0,\n            0.69141,\n            0,\n            0,\n            1.04602\n        ],\n        \"88\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.71922\n        ],\n        \"89\": [\n            0.18906,\n            0.69141,\n            0,\n            0,\n            0.83293\n        ],\n        \"90\": [\n            0.12604,\n            0.69141,\n            0,\n            0,\n            0.60201\n        ],\n        \"91\": [\n            0.24982,\n            0.74947,\n            0,\n            0,\n            0.27764\n        ],\n        \"93\": [\n            0.24982,\n            0.74947,\n            0,\n            0,\n            0.27764\n        ],\n        \"94\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.49965\n        ],\n        \"97\": [\n            0,\n            0.47534,\n            0,\n            0,\n            0.50046\n        ],\n        \"98\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.51315\n        ],\n        \"99\": [\n            0,\n            0.47534,\n            0,\n            0,\n            0.38946\n        ],\n        \"100\": [\n            0,\n            0.62119,\n            0,\n            0,\n            0.49857\n        ],\n        \"101\": [\n            0,\n            0.47534,\n            0,\n            0,\n            0.40053\n        ],\n        \"102\": [\n            0.18906,\n            0.69141,\n            0,\n            0,\n            0.32626\n        ],\n        \"103\": [\n            0.18906,\n            0.47534,\n            0,\n            0,\n            0.5037\n        ],\n        \"104\": [\n            0.18906,\n            0.69141,\n            0,\n            0,\n            0.52126\n        ],\n        \"105\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.27899\n        ],\n        \"106\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.28088\n        ],\n        \"107\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.38946\n        ],\n        \"108\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.27953\n        ],\n        \"109\": [\n            0,\n            0.47534,\n            0,\n            0,\n            0.76676\n        ],\n        \"110\": [\n            0,\n            0.47534,\n            0,\n            0,\n            0.52666\n        ],\n        \"111\": [\n            0,\n            0.47534,\n            0,\n            0,\n            0.48885\n        ],\n        \"112\": [\n            0.18906,\n            0.52396,\n            0,\n            0,\n            0.50046\n        ],\n        \"113\": [\n            0.18906,\n            0.47534,\n            0,\n            0,\n            0.48912\n        ],\n        \"114\": [\n            0,\n            0.47534,\n            0,\n            0,\n            0.38919\n        ],\n        \"115\": [\n            0,\n            0.47534,\n            0,\n            0,\n            0.44266\n        ],\n        \"116\": [\n            0,\n            0.62119,\n            0,\n            0,\n            0.33301\n        ],\n        \"117\": [\n            0,\n            0.47534,\n            0,\n            0,\n            0.5172\n        ],\n        \"118\": [\n            0,\n            0.52396,\n            0,\n            0,\n            0.5118\n        ],\n        \"119\": [\n            0,\n            0.52396,\n            0,\n            0,\n            0.77351\n        ],\n        \"120\": [\n            0.18906,\n            0.47534,\n            0,\n            0,\n            0.38865\n        ],\n        \"121\": [\n            0.18906,\n            0.47534,\n            0,\n            0,\n            0.49884\n        ],\n        \"122\": [\n            0.18906,\n            0.47534,\n            0,\n            0,\n            0.39054\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"8216\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.21471\n        ],\n        \"8217\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.21471\n        ],\n        \"58112\": [\n            0,\n            0.62119,\n            0,\n            0,\n            0.49749\n        ],\n        \"58113\": [\n            0,\n            0.62119,\n            0,\n            0,\n            0.4983\n        ],\n        \"58114\": [\n            0.18906,\n            0.69141,\n            0,\n            0,\n            0.33328\n        ],\n        \"58115\": [\n            0.18906,\n            0.69141,\n            0,\n            0,\n            0.32923\n        ],\n        \"58116\": [\n            0.18906,\n            0.47534,\n            0,\n            0,\n            0.50343\n        ],\n        \"58117\": [\n            0,\n            0.69141,\n            0,\n            0,\n            0.33301\n        ],\n        \"58118\": [\n            0,\n            0.62119,\n            0,\n            0,\n            0.33409\n        ],\n        \"58119\": [\n            0,\n            0.47534,\n            0,\n            0,\n            0.50073\n        ]\n    },\n    \"Main-Bold\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"33\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.35\n        ],\n        \"34\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.60278\n        ],\n        \"35\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.95833\n        ],\n        \"36\": [\n            0.05556,\n            0.75,\n            0,\n            0,\n            0.575\n        ],\n        \"37\": [\n            0.05556,\n            0.75,\n            0,\n            0,\n            0.95833\n        ],\n        \"38\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.89444\n        ],\n        \"39\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.31944\n        ],\n        \"40\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.44722\n        ],\n        \"41\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.44722\n        ],\n        \"42\": [\n            0,\n            0.75,\n            0,\n            0,\n            0.575\n        ],\n        \"43\": [\n            0.13333,\n            0.63333,\n            0,\n            0,\n            0.89444\n        ],\n        \"44\": [\n            0.19444,\n            0.15556,\n            0,\n            0,\n            0.31944\n        ],\n        \"45\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.38333\n        ],\n        \"46\": [\n            0,\n            0.15556,\n            0,\n            0,\n            0.31944\n        ],\n        \"47\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.575\n        ],\n        \"48\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.575\n        ],\n        \"49\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.575\n        ],\n        \"50\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.575\n        ],\n        \"51\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.575\n        ],\n        \"52\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.575\n        ],\n        \"53\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.575\n        ],\n        \"54\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.575\n        ],\n        \"55\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.575\n        ],\n        \"56\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.575\n        ],\n        \"57\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.575\n        ],\n        \"58\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.31944\n        ],\n        \"59\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.31944\n        ],\n        \"60\": [\n            0.08556,\n            0.58556,\n            0,\n            0,\n            0.89444\n        ],\n        \"61\": [\n            -0.10889,\n            0.39111,\n            0,\n            0,\n            0.89444\n        ],\n        \"62\": [\n            0.08556,\n            0.58556,\n            0,\n            0,\n            0.89444\n        ],\n        \"63\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.54305\n        ],\n        \"64\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.89444\n        ],\n        \"65\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.86944\n        ],\n        \"66\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.81805\n        ],\n        \"67\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.83055\n        ],\n        \"68\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.88194\n        ],\n        \"69\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.75555\n        ],\n        \"70\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.72361\n        ],\n        \"71\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.90416\n        ],\n        \"72\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.9\n        ],\n        \"73\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.43611\n        ],\n        \"74\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.59444\n        ],\n        \"75\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.90138\n        ],\n        \"76\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.69166\n        ],\n        \"77\": [\n            0,\n            0.68611,\n            0,\n            0,\n            1.09166\n        ],\n        \"78\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.9\n        ],\n        \"79\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.86388\n        ],\n        \"80\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.78611\n        ],\n        \"81\": [\n            0.19444,\n            0.68611,\n            0,\n            0,\n            0.86388\n        ],\n        \"82\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.8625\n        ],\n        \"83\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.63889\n        ],\n        \"84\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.8\n        ],\n        \"85\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.88472\n        ],\n        \"86\": [\n            0,\n            0.68611,\n            0.01597,\n            0,\n            0.86944\n        ],\n        \"87\": [\n            0,\n            0.68611,\n            0.01597,\n            0,\n            1.18888\n        ],\n        \"88\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.86944\n        ],\n        \"89\": [\n            0,\n            0.68611,\n            0.02875,\n            0,\n            0.86944\n        ],\n        \"90\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.70277\n        ],\n        \"91\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.31944\n        ],\n        \"92\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.575\n        ],\n        \"93\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.31944\n        ],\n        \"94\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.575\n        ],\n        \"95\": [\n            0.31,\n            0.13444,\n            0.03194,\n            0,\n            0.575\n        ],\n        \"97\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.55902\n        ],\n        \"98\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.63889\n        ],\n        \"99\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.51111\n        ],\n        \"100\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.63889\n        ],\n        \"101\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.52708\n        ],\n        \"102\": [\n            0,\n            0.69444,\n            0.10903,\n            0,\n            0.35139\n        ],\n        \"103\": [\n            0.19444,\n            0.44444,\n            0.01597,\n            0,\n            0.575\n        ],\n        \"104\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.63889\n        ],\n        \"105\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.31944\n        ],\n        \"106\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.35139\n        ],\n        \"107\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.60694\n        ],\n        \"108\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.31944\n        ],\n        \"109\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.95833\n        ],\n        \"110\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.63889\n        ],\n        \"111\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.575\n        ],\n        \"112\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.63889\n        ],\n        \"113\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.60694\n        ],\n        \"114\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.47361\n        ],\n        \"115\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.45361\n        ],\n        \"116\": [\n            0,\n            0.63492,\n            0,\n            0,\n            0.44722\n        ],\n        \"117\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.63889\n        ],\n        \"118\": [\n            0,\n            0.44444,\n            0.01597,\n            0,\n            0.60694\n        ],\n        \"119\": [\n            0,\n            0.44444,\n            0.01597,\n            0,\n            0.83055\n        ],\n        \"120\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.60694\n        ],\n        \"121\": [\n            0.19444,\n            0.44444,\n            0.01597,\n            0,\n            0.60694\n        ],\n        \"122\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.51111\n        ],\n        \"123\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.575\n        ],\n        \"124\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.31944\n        ],\n        \"125\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.575\n        ],\n        \"126\": [\n            0.35,\n            0.34444,\n            0,\n            0,\n            0.575\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"163\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.86853\n        ],\n        \"168\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.575\n        ],\n        \"172\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.76666\n        ],\n        \"176\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.86944\n        ],\n        \"177\": [\n            0.13333,\n            0.63333,\n            0,\n            0,\n            0.89444\n        ],\n        \"184\": [\n            0.17014,\n            0,\n            0,\n            0,\n            0.51111\n        ],\n        \"198\": [\n            0,\n            0.68611,\n            0,\n            0,\n            1.04166\n        ],\n        \"215\": [\n            0.13333,\n            0.63333,\n            0,\n            0,\n            0.89444\n        ],\n        \"216\": [\n            0.04861,\n            0.73472,\n            0,\n            0,\n            0.89444\n        ],\n        \"223\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.59722\n        ],\n        \"230\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.83055\n        ],\n        \"247\": [\n            0.13333,\n            0.63333,\n            0,\n            0,\n            0.89444\n        ],\n        \"248\": [\n            0.09722,\n            0.54167,\n            0,\n            0,\n            0.575\n        ],\n        \"305\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.31944\n        ],\n        \"338\": [\n            0,\n            0.68611,\n            0,\n            0,\n            1.16944\n        ],\n        \"339\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.89444\n        ],\n        \"567\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.35139\n        ],\n        \"710\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.575\n        ],\n        \"711\": [\n            0,\n            0.63194,\n            0,\n            0,\n            0.575\n        ],\n        \"713\": [\n            0,\n            0.59611,\n            0,\n            0,\n            0.575\n        ],\n        \"714\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.575\n        ],\n        \"715\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.575\n        ],\n        \"728\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.575\n        ],\n        \"729\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.31944\n        ],\n        \"730\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.86944\n        ],\n        \"732\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.575\n        ],\n        \"733\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.575\n        ],\n        \"915\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.69166\n        ],\n        \"916\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.95833\n        ],\n        \"920\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.89444\n        ],\n        \"923\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.80555\n        ],\n        \"926\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.76666\n        ],\n        \"928\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.9\n        ],\n        \"931\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.83055\n        ],\n        \"933\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.89444\n        ],\n        \"934\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.83055\n        ],\n        \"936\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.89444\n        ],\n        \"937\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.83055\n        ],\n        \"8211\": [\n            0,\n            0.44444,\n            0.03194,\n            0,\n            0.575\n        ],\n        \"8212\": [\n            0,\n            0.44444,\n            0.03194,\n            0,\n            1.14999\n        ],\n        \"8216\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.31944\n        ],\n        \"8217\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.31944\n        ],\n        \"8220\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.60278\n        ],\n        \"8221\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.60278\n        ],\n        \"8224\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.51111\n        ],\n        \"8225\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.51111\n        ],\n        \"8242\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.34444\n        ],\n        \"8407\": [\n            0,\n            0.72444,\n            0.15486,\n            0,\n            0.575\n        ],\n        \"8463\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.66759\n        ],\n        \"8465\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.83055\n        ],\n        \"8467\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.47361\n        ],\n        \"8472\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.74027\n        ],\n        \"8476\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.83055\n        ],\n        \"8501\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.70277\n        ],\n        \"8592\": [\n            -0.10889,\n            0.39111,\n            0,\n            0,\n            1.14999\n        ],\n        \"8593\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.575\n        ],\n        \"8594\": [\n            -0.10889,\n            0.39111,\n            0,\n            0,\n            1.14999\n        ],\n        \"8595\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.575\n        ],\n        \"8596\": [\n            -0.10889,\n            0.39111,\n            0,\n            0,\n            1.14999\n        ],\n        \"8597\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.575\n        ],\n        \"8598\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            1.14999\n        ],\n        \"8599\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            1.14999\n        ],\n        \"8600\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            1.14999\n        ],\n        \"8601\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            1.14999\n        ],\n        \"8636\": [\n            -0.10889,\n            0.39111,\n            0,\n            0,\n            1.14999\n        ],\n        \"8637\": [\n            -0.10889,\n            0.39111,\n            0,\n            0,\n            1.14999\n        ],\n        \"8640\": [\n            -0.10889,\n            0.39111,\n            0,\n            0,\n            1.14999\n        ],\n        \"8641\": [\n            -0.10889,\n            0.39111,\n            0,\n            0,\n            1.14999\n        ],\n        \"8656\": [\n            -0.10889,\n            0.39111,\n            0,\n            0,\n            1.14999\n        ],\n        \"8657\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.70277\n        ],\n        \"8658\": [\n            -0.10889,\n            0.39111,\n            0,\n            0,\n            1.14999\n        ],\n        \"8659\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.70277\n        ],\n        \"8660\": [\n            -0.10889,\n            0.39111,\n            0,\n            0,\n            1.14999\n        ],\n        \"8661\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.70277\n        ],\n        \"8704\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.63889\n        ],\n        \"8706\": [\n            0,\n            0.69444,\n            0.06389,\n            0,\n            0.62847\n        ],\n        \"8707\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.63889\n        ],\n        \"8709\": [\n            0.05556,\n            0.75,\n            0,\n            0,\n            0.575\n        ],\n        \"8711\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.95833\n        ],\n        \"8712\": [\n            0.08556,\n            0.58556,\n            0,\n            0,\n            0.76666\n        ],\n        \"8715\": [\n            0.08556,\n            0.58556,\n            0,\n            0,\n            0.76666\n        ],\n        \"8722\": [\n            0.13333,\n            0.63333,\n            0,\n            0,\n            0.89444\n        ],\n        \"8723\": [\n            0.13333,\n            0.63333,\n            0,\n            0,\n            0.89444\n        ],\n        \"8725\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.575\n        ],\n        \"8726\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.575\n        ],\n        \"8727\": [\n            -0.02778,\n            0.47222,\n            0,\n            0,\n            0.575\n        ],\n        \"8728\": [\n            -0.02639,\n            0.47361,\n            0,\n            0,\n            0.575\n        ],\n        \"8729\": [\n            -0.02639,\n            0.47361,\n            0,\n            0,\n            0.575\n        ],\n        \"8730\": [\n            0.18,\n            0.82,\n            0,\n            0,\n            0.95833\n        ],\n        \"8733\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.89444\n        ],\n        \"8734\": [\n            0,\n            0.44444,\n            0,\n            0,\n            1.14999\n        ],\n        \"8736\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.72222\n        ],\n        \"8739\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.31944\n        ],\n        \"8741\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.575\n        ],\n        \"8743\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.76666\n        ],\n        \"8744\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.76666\n        ],\n        \"8745\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.76666\n        ],\n        \"8746\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.76666\n        ],\n        \"8747\": [\n            0.19444,\n            0.69444,\n            0.12778,\n            0,\n            0.56875\n        ],\n        \"8764\": [\n            -0.10889,\n            0.39111,\n            0,\n            0,\n            0.89444\n        ],\n        \"8768\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.31944\n        ],\n        \"8771\": [\n            0.00222,\n            0.50222,\n            0,\n            0,\n            0.89444\n        ],\n        \"8773\": [\n            0.027,\n            0.638,\n            0,\n            0,\n            0.894\n        ],\n        \"8776\": [\n            0.02444,\n            0.52444,\n            0,\n            0,\n            0.89444\n        ],\n        \"8781\": [\n            0.00222,\n            0.50222,\n            0,\n            0,\n            0.89444\n        ],\n        \"8801\": [\n            0.00222,\n            0.50222,\n            0,\n            0,\n            0.89444\n        ],\n        \"8804\": [\n            0.19667,\n            0.69667,\n            0,\n            0,\n            0.89444\n        ],\n        \"8805\": [\n            0.19667,\n            0.69667,\n            0,\n            0,\n            0.89444\n        ],\n        \"8810\": [\n            0.08556,\n            0.58556,\n            0,\n            0,\n            1.14999\n        ],\n        \"8811\": [\n            0.08556,\n            0.58556,\n            0,\n            0,\n            1.14999\n        ],\n        \"8826\": [\n            0.08556,\n            0.58556,\n            0,\n            0,\n            0.89444\n        ],\n        \"8827\": [\n            0.08556,\n            0.58556,\n            0,\n            0,\n            0.89444\n        ],\n        \"8834\": [\n            0.08556,\n            0.58556,\n            0,\n            0,\n            0.89444\n        ],\n        \"8835\": [\n            0.08556,\n            0.58556,\n            0,\n            0,\n            0.89444\n        ],\n        \"8838\": [\n            0.19667,\n            0.69667,\n            0,\n            0,\n            0.89444\n        ],\n        \"8839\": [\n            0.19667,\n            0.69667,\n            0,\n            0,\n            0.89444\n        ],\n        \"8846\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.76666\n        ],\n        \"8849\": [\n            0.19667,\n            0.69667,\n            0,\n            0,\n            0.89444\n        ],\n        \"8850\": [\n            0.19667,\n            0.69667,\n            0,\n            0,\n            0.89444\n        ],\n        \"8851\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.76666\n        ],\n        \"8852\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.76666\n        ],\n        \"8853\": [\n            0.13333,\n            0.63333,\n            0,\n            0,\n            0.89444\n        ],\n        \"8854\": [\n            0.13333,\n            0.63333,\n            0,\n            0,\n            0.89444\n        ],\n        \"8855\": [\n            0.13333,\n            0.63333,\n            0,\n            0,\n            0.89444\n        ],\n        \"8856\": [\n            0.13333,\n            0.63333,\n            0,\n            0,\n            0.89444\n        ],\n        \"8857\": [\n            0.13333,\n            0.63333,\n            0,\n            0,\n            0.89444\n        ],\n        \"8866\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.70277\n        ],\n        \"8867\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.70277\n        ],\n        \"8868\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.89444\n        ],\n        \"8869\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.89444\n        ],\n        \"8900\": [\n            -0.02639,\n            0.47361,\n            0,\n            0,\n            0.575\n        ],\n        \"8901\": [\n            -0.02639,\n            0.47361,\n            0,\n            0,\n            0.31944\n        ],\n        \"8902\": [\n            -0.02778,\n            0.47222,\n            0,\n            0,\n            0.575\n        ],\n        \"8968\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.51111\n        ],\n        \"8969\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.51111\n        ],\n        \"8970\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.51111\n        ],\n        \"8971\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.51111\n        ],\n        \"8994\": [\n            -0.13889,\n            0.36111,\n            0,\n            0,\n            1.14999\n        ],\n        \"8995\": [\n            -0.13889,\n            0.36111,\n            0,\n            0,\n            1.14999\n        ],\n        \"9651\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            1.02222\n        ],\n        \"9657\": [\n            -0.02778,\n            0.47222,\n            0,\n            0,\n            0.575\n        ],\n        \"9661\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            1.02222\n        ],\n        \"9667\": [\n            -0.02778,\n            0.47222,\n            0,\n            0,\n            0.575\n        ],\n        \"9711\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            1.14999\n        ],\n        \"9824\": [\n            0.12963,\n            0.69444,\n            0,\n            0,\n            0.89444\n        ],\n        \"9825\": [\n            0.12963,\n            0.69444,\n            0,\n            0,\n            0.89444\n        ],\n        \"9826\": [\n            0.12963,\n            0.69444,\n            0,\n            0,\n            0.89444\n        ],\n        \"9827\": [\n            0.12963,\n            0.69444,\n            0,\n            0,\n            0.89444\n        ],\n        \"9837\": [\n            0,\n            0.75,\n            0,\n            0,\n            0.44722\n        ],\n        \"9838\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.44722\n        ],\n        \"9839\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.44722\n        ],\n        \"10216\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.44722\n        ],\n        \"10217\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.44722\n        ],\n        \"10815\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.9\n        ],\n        \"10927\": [\n            0.19667,\n            0.69667,\n            0,\n            0,\n            0.89444\n        ],\n        \"10928\": [\n            0.19667,\n            0.69667,\n            0,\n            0,\n            0.89444\n        ],\n        \"57376\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0\n        ]\n    },\n    \"Main-BoldItalic\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"33\": [\n            0,\n            0.69444,\n            0.11417,\n            0,\n            0.38611\n        ],\n        \"34\": [\n            0,\n            0.69444,\n            0.07939,\n            0,\n            0.62055\n        ],\n        \"35\": [\n            0.19444,\n            0.69444,\n            0.06833,\n            0,\n            0.94444\n        ],\n        \"37\": [\n            0.05556,\n            0.75,\n            0.12861,\n            0,\n            0.94444\n        ],\n        \"38\": [\n            0,\n            0.69444,\n            0.08528,\n            0,\n            0.88555\n        ],\n        \"39\": [\n            0,\n            0.69444,\n            0.12945,\n            0,\n            0.35555\n        ],\n        \"40\": [\n            0.25,\n            0.75,\n            0.15806,\n            0,\n            0.47333\n        ],\n        \"41\": [\n            0.25,\n            0.75,\n            0.03306,\n            0,\n            0.47333\n        ],\n        \"42\": [\n            0,\n            0.75,\n            0.14333,\n            0,\n            0.59111\n        ],\n        \"43\": [\n            0.10333,\n            0.60333,\n            0.03306,\n            0,\n            0.88555\n        ],\n        \"44\": [\n            0.19444,\n            0.14722,\n            0,\n            0,\n            0.35555\n        ],\n        \"45\": [\n            0,\n            0.44444,\n            0.02611,\n            0,\n            0.41444\n        ],\n        \"46\": [\n            0,\n            0.14722,\n            0,\n            0,\n            0.35555\n        ],\n        \"47\": [\n            0.25,\n            0.75,\n            0.15806,\n            0,\n            0.59111\n        ],\n        \"48\": [\n            0,\n            0.64444,\n            0.13167,\n            0,\n            0.59111\n        ],\n        \"49\": [\n            0,\n            0.64444,\n            0.13167,\n            0,\n            0.59111\n        ],\n        \"50\": [\n            0,\n            0.64444,\n            0.13167,\n            0,\n            0.59111\n        ],\n        \"51\": [\n            0,\n            0.64444,\n            0.13167,\n            0,\n            0.59111\n        ],\n        \"52\": [\n            0.19444,\n            0.64444,\n            0.13167,\n            0,\n            0.59111\n        ],\n        \"53\": [\n            0,\n            0.64444,\n            0.13167,\n            0,\n            0.59111\n        ],\n        \"54\": [\n            0,\n            0.64444,\n            0.13167,\n            0,\n            0.59111\n        ],\n        \"55\": [\n            0.19444,\n            0.64444,\n            0.13167,\n            0,\n            0.59111\n        ],\n        \"56\": [\n            0,\n            0.64444,\n            0.13167,\n            0,\n            0.59111\n        ],\n        \"57\": [\n            0,\n            0.64444,\n            0.13167,\n            0,\n            0.59111\n        ],\n        \"58\": [\n            0,\n            0.44444,\n            0.06695,\n            0,\n            0.35555\n        ],\n        \"59\": [\n            0.19444,\n            0.44444,\n            0.06695,\n            0,\n            0.35555\n        ],\n        \"61\": [\n            -0.10889,\n            0.39111,\n            0.06833,\n            0,\n            0.88555\n        ],\n        \"63\": [\n            0,\n            0.69444,\n            0.11472,\n            0,\n            0.59111\n        ],\n        \"64\": [\n            0,\n            0.69444,\n            0.09208,\n            0,\n            0.88555\n        ],\n        \"65\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.86555\n        ],\n        \"66\": [\n            0,\n            0.68611,\n            0.0992,\n            0,\n            0.81666\n        ],\n        \"67\": [\n            0,\n            0.68611,\n            0.14208,\n            0,\n            0.82666\n        ],\n        \"68\": [\n            0,\n            0.68611,\n            0.09062,\n            0,\n            0.87555\n        ],\n        \"69\": [\n            0,\n            0.68611,\n            0.11431,\n            0,\n            0.75666\n        ],\n        \"70\": [\n            0,\n            0.68611,\n            0.12903,\n            0,\n            0.72722\n        ],\n        \"71\": [\n            0,\n            0.68611,\n            0.07347,\n            0,\n            0.89527\n        ],\n        \"72\": [\n            0,\n            0.68611,\n            0.17208,\n            0,\n            0.8961\n        ],\n        \"73\": [\n            0,\n            0.68611,\n            0.15681,\n            0,\n            0.47166\n        ],\n        \"74\": [\n            0,\n            0.68611,\n            0.145,\n            0,\n            0.61055\n        ],\n        \"75\": [\n            0,\n            0.68611,\n            0.14208,\n            0,\n            0.89499\n        ],\n        \"76\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.69777\n        ],\n        \"77\": [\n            0,\n            0.68611,\n            0.17208,\n            0,\n            1.07277\n        ],\n        \"78\": [\n            0,\n            0.68611,\n            0.17208,\n            0,\n            0.8961\n        ],\n        \"79\": [\n            0,\n            0.68611,\n            0.09062,\n            0,\n            0.85499\n        ],\n        \"80\": [\n            0,\n            0.68611,\n            0.0992,\n            0,\n            0.78721\n        ],\n        \"81\": [\n            0.19444,\n            0.68611,\n            0.09062,\n            0,\n            0.85499\n        ],\n        \"82\": [\n            0,\n            0.68611,\n            0.02559,\n            0,\n            0.85944\n        ],\n        \"83\": [\n            0,\n            0.68611,\n            0.11264,\n            0,\n            0.64999\n        ],\n        \"84\": [\n            0,\n            0.68611,\n            0.12903,\n            0,\n            0.7961\n        ],\n        \"85\": [\n            0,\n            0.68611,\n            0.17208,\n            0,\n            0.88083\n        ],\n        \"86\": [\n            0,\n            0.68611,\n            0.18625,\n            0,\n            0.86555\n        ],\n        \"87\": [\n            0,\n            0.68611,\n            0.18625,\n            0,\n            1.15999\n        ],\n        \"88\": [\n            0,\n            0.68611,\n            0.15681,\n            0,\n            0.86555\n        ],\n        \"89\": [\n            0,\n            0.68611,\n            0.19803,\n            0,\n            0.86555\n        ],\n        \"90\": [\n            0,\n            0.68611,\n            0.14208,\n            0,\n            0.70888\n        ],\n        \"91\": [\n            0.25,\n            0.75,\n            0.1875,\n            0,\n            0.35611\n        ],\n        \"93\": [\n            0.25,\n            0.75,\n            0.09972,\n            0,\n            0.35611\n        ],\n        \"94\": [\n            0,\n            0.69444,\n            0.06709,\n            0,\n            0.59111\n        ],\n        \"95\": [\n            0.31,\n            0.13444,\n            0.09811,\n            0,\n            0.59111\n        ],\n        \"97\": [\n            0,\n            0.44444,\n            0.09426,\n            0,\n            0.59111\n        ],\n        \"98\": [\n            0,\n            0.69444,\n            0.07861,\n            0,\n            0.53222\n        ],\n        \"99\": [\n            0,\n            0.44444,\n            0.05222,\n            0,\n            0.53222\n        ],\n        \"100\": [\n            0,\n            0.69444,\n            0.10861,\n            0,\n            0.59111\n        ],\n        \"101\": [\n            0,\n            0.44444,\n            0.085,\n            0,\n            0.53222\n        ],\n        \"102\": [\n            0.19444,\n            0.69444,\n            0.21778,\n            0,\n            0.4\n        ],\n        \"103\": [\n            0.19444,\n            0.44444,\n            0.105,\n            0,\n            0.53222\n        ],\n        \"104\": [\n            0,\n            0.69444,\n            0.09426,\n            0,\n            0.59111\n        ],\n        \"105\": [\n            0,\n            0.69326,\n            0.11387,\n            0,\n            0.35555\n        ],\n        \"106\": [\n            0.19444,\n            0.69326,\n            0.1672,\n            0,\n            0.35555\n        ],\n        \"107\": [\n            0,\n            0.69444,\n            0.11111,\n            0,\n            0.53222\n        ],\n        \"108\": [\n            0,\n            0.69444,\n            0.10861,\n            0,\n            0.29666\n        ],\n        \"109\": [\n            0,\n            0.44444,\n            0.09426,\n            0,\n            0.94444\n        ],\n        \"110\": [\n            0,\n            0.44444,\n            0.09426,\n            0,\n            0.64999\n        ],\n        \"111\": [\n            0,\n            0.44444,\n            0.07861,\n            0,\n            0.59111\n        ],\n        \"112\": [\n            0.19444,\n            0.44444,\n            0.07861,\n            0,\n            0.59111\n        ],\n        \"113\": [\n            0.19444,\n            0.44444,\n            0.105,\n            0,\n            0.53222\n        ],\n        \"114\": [\n            0,\n            0.44444,\n            0.11111,\n            0,\n            0.50167\n        ],\n        \"115\": [\n            0,\n            0.44444,\n            0.08167,\n            0,\n            0.48694\n        ],\n        \"116\": [\n            0,\n            0.63492,\n            0.09639,\n            0,\n            0.385\n        ],\n        \"117\": [\n            0,\n            0.44444,\n            0.09426,\n            0,\n            0.62055\n        ],\n        \"118\": [\n            0,\n            0.44444,\n            0.11111,\n            0,\n            0.53222\n        ],\n        \"119\": [\n            0,\n            0.44444,\n            0.11111,\n            0,\n            0.76777\n        ],\n        \"120\": [\n            0,\n            0.44444,\n            0.12583,\n            0,\n            0.56055\n        ],\n        \"121\": [\n            0.19444,\n            0.44444,\n            0.105,\n            0,\n            0.56166\n        ],\n        \"122\": [\n            0,\n            0.44444,\n            0.13889,\n            0,\n            0.49055\n        ],\n        \"126\": [\n            0.35,\n            0.34444,\n            0.11472,\n            0,\n            0.59111\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"168\": [\n            0,\n            0.69444,\n            0.11473,\n            0,\n            0.59111\n        ],\n        \"176\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.94888\n        ],\n        \"184\": [\n            0.17014,\n            0,\n            0,\n            0,\n            0.53222\n        ],\n        \"198\": [\n            0,\n            0.68611,\n            0.11431,\n            0,\n            1.02277\n        ],\n        \"216\": [\n            0.04861,\n            0.73472,\n            0.09062,\n            0,\n            0.88555\n        ],\n        \"223\": [\n            0.19444,\n            0.69444,\n            0.09736,\n            0,\n            0.665\n        ],\n        \"230\": [\n            0,\n            0.44444,\n            0.085,\n            0,\n            0.82666\n        ],\n        \"248\": [\n            0.09722,\n            0.54167,\n            0.09458,\n            0,\n            0.59111\n        ],\n        \"305\": [\n            0,\n            0.44444,\n            0.09426,\n            0,\n            0.35555\n        ],\n        \"338\": [\n            0,\n            0.68611,\n            0.11431,\n            0,\n            1.14054\n        ],\n        \"339\": [\n            0,\n            0.44444,\n            0.085,\n            0,\n            0.82666\n        ],\n        \"567\": [\n            0.19444,\n            0.44444,\n            0.04611,\n            0,\n            0.385\n        ],\n        \"710\": [\n            0,\n            0.69444,\n            0.06709,\n            0,\n            0.59111\n        ],\n        \"711\": [\n            0,\n            0.63194,\n            0.08271,\n            0,\n            0.59111\n        ],\n        \"713\": [\n            0,\n            0.59444,\n            0.10444,\n            0,\n            0.59111\n        ],\n        \"714\": [\n            0,\n            0.69444,\n            0.08528,\n            0,\n            0.59111\n        ],\n        \"715\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.59111\n        ],\n        \"728\": [\n            0,\n            0.69444,\n            0.10333,\n            0,\n            0.59111\n        ],\n        \"729\": [\n            0,\n            0.69444,\n            0.12945,\n            0,\n            0.35555\n        ],\n        \"730\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.94888\n        ],\n        \"732\": [\n            0,\n            0.69444,\n            0.11472,\n            0,\n            0.59111\n        ],\n        \"733\": [\n            0,\n            0.69444,\n            0.11472,\n            0,\n            0.59111\n        ],\n        \"915\": [\n            0,\n            0.68611,\n            0.12903,\n            0,\n            0.69777\n        ],\n        \"916\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.94444\n        ],\n        \"920\": [\n            0,\n            0.68611,\n            0.09062,\n            0,\n            0.88555\n        ],\n        \"923\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.80666\n        ],\n        \"926\": [\n            0,\n            0.68611,\n            0.15092,\n            0,\n            0.76777\n        ],\n        \"928\": [\n            0,\n            0.68611,\n            0.17208,\n            0,\n            0.8961\n        ],\n        \"931\": [\n            0,\n            0.68611,\n            0.11431,\n            0,\n            0.82666\n        ],\n        \"933\": [\n            0,\n            0.68611,\n            0.10778,\n            0,\n            0.88555\n        ],\n        \"934\": [\n            0,\n            0.68611,\n            0.05632,\n            0,\n            0.82666\n        ],\n        \"936\": [\n            0,\n            0.68611,\n            0.10778,\n            0,\n            0.88555\n        ],\n        \"937\": [\n            0,\n            0.68611,\n            0.0992,\n            0,\n            0.82666\n        ],\n        \"8211\": [\n            0,\n            0.44444,\n            0.09811,\n            0,\n            0.59111\n        ],\n        \"8212\": [\n            0,\n            0.44444,\n            0.09811,\n            0,\n            1.18221\n        ],\n        \"8216\": [\n            0,\n            0.69444,\n            0.12945,\n            0,\n            0.35555\n        ],\n        \"8217\": [\n            0,\n            0.69444,\n            0.12945,\n            0,\n            0.35555\n        ],\n        \"8220\": [\n            0,\n            0.69444,\n            0.16772,\n            0,\n            0.62055\n        ],\n        \"8221\": [\n            0,\n            0.69444,\n            0.07939,\n            0,\n            0.62055\n        ]\n    },\n    \"Main-Italic\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"33\": [\n            0,\n            0.69444,\n            0.12417,\n            0,\n            0.30667\n        ],\n        \"34\": [\n            0,\n            0.69444,\n            0.06961,\n            0,\n            0.51444\n        ],\n        \"35\": [\n            0.19444,\n            0.69444,\n            0.06616,\n            0,\n            0.81777\n        ],\n        \"37\": [\n            0.05556,\n            0.75,\n            0.13639,\n            0,\n            0.81777\n        ],\n        \"38\": [\n            0,\n            0.69444,\n            0.09694,\n            0,\n            0.76666\n        ],\n        \"39\": [\n            0,\n            0.69444,\n            0.12417,\n            0,\n            0.30667\n        ],\n        \"40\": [\n            0.25,\n            0.75,\n            0.16194,\n            0,\n            0.40889\n        ],\n        \"41\": [\n            0.25,\n            0.75,\n            0.03694,\n            0,\n            0.40889\n        ],\n        \"42\": [\n            0,\n            0.75,\n            0.14917,\n            0,\n            0.51111\n        ],\n        \"43\": [\n            0.05667,\n            0.56167,\n            0.03694,\n            0,\n            0.76666\n        ],\n        \"44\": [\n            0.19444,\n            0.10556,\n            0,\n            0,\n            0.30667\n        ],\n        \"45\": [\n            0,\n            0.43056,\n            0.02826,\n            0,\n            0.35778\n        ],\n        \"46\": [\n            0,\n            0.10556,\n            0,\n            0,\n            0.30667\n        ],\n        \"47\": [\n            0.25,\n            0.75,\n            0.16194,\n            0,\n            0.51111\n        ],\n        \"48\": [\n            0,\n            0.64444,\n            0.13556,\n            0,\n            0.51111\n        ],\n        \"49\": [\n            0,\n            0.64444,\n            0.13556,\n            0,\n            0.51111\n        ],\n        \"50\": [\n            0,\n            0.64444,\n            0.13556,\n            0,\n            0.51111\n        ],\n        \"51\": [\n            0,\n            0.64444,\n            0.13556,\n            0,\n            0.51111\n        ],\n        \"52\": [\n            0.19444,\n            0.64444,\n            0.13556,\n            0,\n            0.51111\n        ],\n        \"53\": [\n            0,\n            0.64444,\n            0.13556,\n            0,\n            0.51111\n        ],\n        \"54\": [\n            0,\n            0.64444,\n            0.13556,\n            0,\n            0.51111\n        ],\n        \"55\": [\n            0.19444,\n            0.64444,\n            0.13556,\n            0,\n            0.51111\n        ],\n        \"56\": [\n            0,\n            0.64444,\n            0.13556,\n            0,\n            0.51111\n        ],\n        \"57\": [\n            0,\n            0.64444,\n            0.13556,\n            0,\n            0.51111\n        ],\n        \"58\": [\n            0,\n            0.43056,\n            0.0582,\n            0,\n            0.30667\n        ],\n        \"59\": [\n            0.19444,\n            0.43056,\n            0.0582,\n            0,\n            0.30667\n        ],\n        \"61\": [\n            -0.13313,\n            0.36687,\n            0.06616,\n            0,\n            0.76666\n        ],\n        \"63\": [\n            0,\n            0.69444,\n            0.1225,\n            0,\n            0.51111\n        ],\n        \"64\": [\n            0,\n            0.69444,\n            0.09597,\n            0,\n            0.76666\n        ],\n        \"65\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.74333\n        ],\n        \"66\": [\n            0,\n            0.68333,\n            0.10257,\n            0,\n            0.70389\n        ],\n        \"67\": [\n            0,\n            0.68333,\n            0.14528,\n            0,\n            0.71555\n        ],\n        \"68\": [\n            0,\n            0.68333,\n            0.09403,\n            0,\n            0.755\n        ],\n        \"69\": [\n            0,\n            0.68333,\n            0.12028,\n            0,\n            0.67833\n        ],\n        \"70\": [\n            0,\n            0.68333,\n            0.13305,\n            0,\n            0.65277\n        ],\n        \"71\": [\n            0,\n            0.68333,\n            0.08722,\n            0,\n            0.77361\n        ],\n        \"72\": [\n            0,\n            0.68333,\n            0.16389,\n            0,\n            0.74333\n        ],\n        \"73\": [\n            0,\n            0.68333,\n            0.15806,\n            0,\n            0.38555\n        ],\n        \"74\": [\n            0,\n            0.68333,\n            0.14028,\n            0,\n            0.525\n        ],\n        \"75\": [\n            0,\n            0.68333,\n            0.14528,\n            0,\n            0.76888\n        ],\n        \"76\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.62722\n        ],\n        \"77\": [\n            0,\n            0.68333,\n            0.16389,\n            0,\n            0.89666\n        ],\n        \"78\": [\n            0,\n            0.68333,\n            0.16389,\n            0,\n            0.74333\n        ],\n        \"79\": [\n            0,\n            0.68333,\n            0.09403,\n            0,\n            0.76666\n        ],\n        \"80\": [\n            0,\n            0.68333,\n            0.10257,\n            0,\n            0.67833\n        ],\n        \"81\": [\n            0.19444,\n            0.68333,\n            0.09403,\n            0,\n            0.76666\n        ],\n        \"82\": [\n            0,\n            0.68333,\n            0.03868,\n            0,\n            0.72944\n        ],\n        \"83\": [\n            0,\n            0.68333,\n            0.11972,\n            0,\n            0.56222\n        ],\n        \"84\": [\n            0,\n            0.68333,\n            0.13305,\n            0,\n            0.71555\n        ],\n        \"85\": [\n            0,\n            0.68333,\n            0.16389,\n            0,\n            0.74333\n        ],\n        \"86\": [\n            0,\n            0.68333,\n            0.18361,\n            0,\n            0.74333\n        ],\n        \"87\": [\n            0,\n            0.68333,\n            0.18361,\n            0,\n            0.99888\n        ],\n        \"88\": [\n            0,\n            0.68333,\n            0.15806,\n            0,\n            0.74333\n        ],\n        \"89\": [\n            0,\n            0.68333,\n            0.19383,\n            0,\n            0.74333\n        ],\n        \"90\": [\n            0,\n            0.68333,\n            0.14528,\n            0,\n            0.61333\n        ],\n        \"91\": [\n            0.25,\n            0.75,\n            0.1875,\n            0,\n            0.30667\n        ],\n        \"93\": [\n            0.25,\n            0.75,\n            0.10528,\n            0,\n            0.30667\n        ],\n        \"94\": [\n            0,\n            0.69444,\n            0.06646,\n            0,\n            0.51111\n        ],\n        \"95\": [\n            0.31,\n            0.12056,\n            0.09208,\n            0,\n            0.51111\n        ],\n        \"97\": [\n            0,\n            0.43056,\n            0.07671,\n            0,\n            0.51111\n        ],\n        \"98\": [\n            0,\n            0.69444,\n            0.06312,\n            0,\n            0.46\n        ],\n        \"99\": [\n            0,\n            0.43056,\n            0.05653,\n            0,\n            0.46\n        ],\n        \"100\": [\n            0,\n            0.69444,\n            0.10333,\n            0,\n            0.51111\n        ],\n        \"101\": [\n            0,\n            0.43056,\n            0.07514,\n            0,\n            0.46\n        ],\n        \"102\": [\n            0.19444,\n            0.69444,\n            0.21194,\n            0,\n            0.30667\n        ],\n        \"103\": [\n            0.19444,\n            0.43056,\n            0.08847,\n            0,\n            0.46\n        ],\n        \"104\": [\n            0,\n            0.69444,\n            0.07671,\n            0,\n            0.51111\n        ],\n        \"105\": [\n            0,\n            0.65536,\n            0.1019,\n            0,\n            0.30667\n        ],\n        \"106\": [\n            0.19444,\n            0.65536,\n            0.14467,\n            0,\n            0.30667\n        ],\n        \"107\": [\n            0,\n            0.69444,\n            0.10764,\n            0,\n            0.46\n        ],\n        \"108\": [\n            0,\n            0.69444,\n            0.10333,\n            0,\n            0.25555\n        ],\n        \"109\": [\n            0,\n            0.43056,\n            0.07671,\n            0,\n            0.81777\n        ],\n        \"110\": [\n            0,\n            0.43056,\n            0.07671,\n            0,\n            0.56222\n        ],\n        \"111\": [\n            0,\n            0.43056,\n            0.06312,\n            0,\n            0.51111\n        ],\n        \"112\": [\n            0.19444,\n            0.43056,\n            0.06312,\n            0,\n            0.51111\n        ],\n        \"113\": [\n            0.19444,\n            0.43056,\n            0.08847,\n            0,\n            0.46\n        ],\n        \"114\": [\n            0,\n            0.43056,\n            0.10764,\n            0,\n            0.42166\n        ],\n        \"115\": [\n            0,\n            0.43056,\n            0.08208,\n            0,\n            0.40889\n        ],\n        \"116\": [\n            0,\n            0.61508,\n            0.09486,\n            0,\n            0.33222\n        ],\n        \"117\": [\n            0,\n            0.43056,\n            0.07671,\n            0,\n            0.53666\n        ],\n        \"118\": [\n            0,\n            0.43056,\n            0.10764,\n            0,\n            0.46\n        ],\n        \"119\": [\n            0,\n            0.43056,\n            0.10764,\n            0,\n            0.66444\n        ],\n        \"120\": [\n            0,\n            0.43056,\n            0.12042,\n            0,\n            0.46389\n        ],\n        \"121\": [\n            0.19444,\n            0.43056,\n            0.08847,\n            0,\n            0.48555\n        ],\n        \"122\": [\n            0,\n            0.43056,\n            0.12292,\n            0,\n            0.40889\n        ],\n        \"126\": [\n            0.35,\n            0.31786,\n            0.11585,\n            0,\n            0.51111\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"168\": [\n            0,\n            0.66786,\n            0.10474,\n            0,\n            0.51111\n        ],\n        \"176\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.83129\n        ],\n        \"184\": [\n            0.17014,\n            0,\n            0,\n            0,\n            0.46\n        ],\n        \"198\": [\n            0,\n            0.68333,\n            0.12028,\n            0,\n            0.88277\n        ],\n        \"216\": [\n            0.04861,\n            0.73194,\n            0.09403,\n            0,\n            0.76666\n        ],\n        \"223\": [\n            0.19444,\n            0.69444,\n            0.10514,\n            0,\n            0.53666\n        ],\n        \"230\": [\n            0,\n            0.43056,\n            0.07514,\n            0,\n            0.71555\n        ],\n        \"248\": [\n            0.09722,\n            0.52778,\n            0.09194,\n            0,\n            0.51111\n        ],\n        \"338\": [\n            0,\n            0.68333,\n            0.12028,\n            0,\n            0.98499\n        ],\n        \"339\": [\n            0,\n            0.43056,\n            0.07514,\n            0,\n            0.71555\n        ],\n        \"710\": [\n            0,\n            0.69444,\n            0.06646,\n            0,\n            0.51111\n        ],\n        \"711\": [\n            0,\n            0.62847,\n            0.08295,\n            0,\n            0.51111\n        ],\n        \"713\": [\n            0,\n            0.56167,\n            0.10333,\n            0,\n            0.51111\n        ],\n        \"714\": [\n            0,\n            0.69444,\n            0.09694,\n            0,\n            0.51111\n        ],\n        \"715\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.51111\n        ],\n        \"728\": [\n            0,\n            0.69444,\n            0.10806,\n            0,\n            0.51111\n        ],\n        \"729\": [\n            0,\n            0.66786,\n            0.11752,\n            0,\n            0.30667\n        ],\n        \"730\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.83129\n        ],\n        \"732\": [\n            0,\n            0.66786,\n            0.11585,\n            0,\n            0.51111\n        ],\n        \"733\": [\n            0,\n            0.69444,\n            0.1225,\n            0,\n            0.51111\n        ],\n        \"915\": [\n            0,\n            0.68333,\n            0.13305,\n            0,\n            0.62722\n        ],\n        \"916\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.81777\n        ],\n        \"920\": [\n            0,\n            0.68333,\n            0.09403,\n            0,\n            0.76666\n        ],\n        \"923\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.69222\n        ],\n        \"926\": [\n            0,\n            0.68333,\n            0.15294,\n            0,\n            0.66444\n        ],\n        \"928\": [\n            0,\n            0.68333,\n            0.16389,\n            0,\n            0.74333\n        ],\n        \"931\": [\n            0,\n            0.68333,\n            0.12028,\n            0,\n            0.71555\n        ],\n        \"933\": [\n            0,\n            0.68333,\n            0.11111,\n            0,\n            0.76666\n        ],\n        \"934\": [\n            0,\n            0.68333,\n            0.05986,\n            0,\n            0.71555\n        ],\n        \"936\": [\n            0,\n            0.68333,\n            0.11111,\n            0,\n            0.76666\n        ],\n        \"937\": [\n            0,\n            0.68333,\n            0.10257,\n            0,\n            0.71555\n        ],\n        \"8211\": [\n            0,\n            0.43056,\n            0.09208,\n            0,\n            0.51111\n        ],\n        \"8212\": [\n            0,\n            0.43056,\n            0.09208,\n            0,\n            1.02222\n        ],\n        \"8216\": [\n            0,\n            0.69444,\n            0.12417,\n            0,\n            0.30667\n        ],\n        \"8217\": [\n            0,\n            0.69444,\n            0.12417,\n            0,\n            0.30667\n        ],\n        \"8220\": [\n            0,\n            0.69444,\n            0.1685,\n            0,\n            0.51444\n        ],\n        \"8221\": [\n            0,\n            0.69444,\n            0.06961,\n            0,\n            0.51444\n        ],\n        \"8463\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.54028\n        ]\n    },\n    \"Main-Regular\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"33\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.27778\n        ],\n        \"34\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"35\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.83334\n        ],\n        \"36\": [\n            0.05556,\n            0.75,\n            0,\n            0,\n            0.5\n        ],\n        \"37\": [\n            0.05556,\n            0.75,\n            0,\n            0,\n            0.83334\n        ],\n        \"38\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.77778\n        ],\n        \"39\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.27778\n        ],\n        \"40\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.38889\n        ],\n        \"41\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.38889\n        ],\n        \"42\": [\n            0,\n            0.75,\n            0,\n            0,\n            0.5\n        ],\n        \"43\": [\n            0.08333,\n            0.58333,\n            0,\n            0,\n            0.77778\n        ],\n        \"44\": [\n            0.19444,\n            0.10556,\n            0,\n            0,\n            0.27778\n        ],\n        \"45\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.33333\n        ],\n        \"46\": [\n            0,\n            0.10556,\n            0,\n            0,\n            0.27778\n        ],\n        \"47\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.5\n        ],\n        \"48\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.5\n        ],\n        \"49\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.5\n        ],\n        \"50\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.5\n        ],\n        \"51\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.5\n        ],\n        \"52\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.5\n        ],\n        \"53\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.5\n        ],\n        \"54\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.5\n        ],\n        \"55\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.5\n        ],\n        \"56\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.5\n        ],\n        \"57\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.5\n        ],\n        \"58\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.27778\n        ],\n        \"59\": [\n            0.19444,\n            0.43056,\n            0,\n            0,\n            0.27778\n        ],\n        \"60\": [\n            0.0391,\n            0.5391,\n            0,\n            0,\n            0.77778\n        ],\n        \"61\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            0.77778\n        ],\n        \"62\": [\n            0.0391,\n            0.5391,\n            0,\n            0,\n            0.77778\n        ],\n        \"63\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.47222\n        ],\n        \"64\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.77778\n        ],\n        \"65\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.75\n        ],\n        \"66\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.70834\n        ],\n        \"67\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.72222\n        ],\n        \"68\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.76389\n        ],\n        \"69\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.68056\n        ],\n        \"70\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.65278\n        ],\n        \"71\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.78472\n        ],\n        \"72\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.75\n        ],\n        \"73\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.36111\n        ],\n        \"74\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.51389\n        ],\n        \"75\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.77778\n        ],\n        \"76\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.625\n        ],\n        \"77\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.91667\n        ],\n        \"78\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.75\n        ],\n        \"79\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.77778\n        ],\n        \"80\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.68056\n        ],\n        \"81\": [\n            0.19444,\n            0.68333,\n            0,\n            0,\n            0.77778\n        ],\n        \"82\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.73611\n        ],\n        \"83\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.55556\n        ],\n        \"84\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.72222\n        ],\n        \"85\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.75\n        ],\n        \"86\": [\n            0,\n            0.68333,\n            0.01389,\n            0,\n            0.75\n        ],\n        \"87\": [\n            0,\n            0.68333,\n            0.01389,\n            0,\n            1.02778\n        ],\n        \"88\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.75\n        ],\n        \"89\": [\n            0,\n            0.68333,\n            0.025,\n            0,\n            0.75\n        ],\n        \"90\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.61111\n        ],\n        \"91\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.27778\n        ],\n        \"92\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.5\n        ],\n        \"93\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.27778\n        ],\n        \"94\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"95\": [\n            0.31,\n            0.12056,\n            0.02778,\n            0,\n            0.5\n        ],\n        \"97\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.5\n        ],\n        \"98\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55556\n        ],\n        \"99\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.44445\n        ],\n        \"100\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55556\n        ],\n        \"101\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.44445\n        ],\n        \"102\": [\n            0,\n            0.69444,\n            0.07778,\n            0,\n            0.30556\n        ],\n        \"103\": [\n            0.19444,\n            0.43056,\n            0.01389,\n            0,\n            0.5\n        ],\n        \"104\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55556\n        ],\n        \"105\": [\n            0,\n            0.66786,\n            0,\n            0,\n            0.27778\n        ],\n        \"106\": [\n            0.19444,\n            0.66786,\n            0,\n            0,\n            0.30556\n        ],\n        \"107\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.52778\n        ],\n        \"108\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.27778\n        ],\n        \"109\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.83334\n        ],\n        \"110\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.55556\n        ],\n        \"111\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.5\n        ],\n        \"112\": [\n            0.19444,\n            0.43056,\n            0,\n            0,\n            0.55556\n        ],\n        \"113\": [\n            0.19444,\n            0.43056,\n            0,\n            0,\n            0.52778\n        ],\n        \"114\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.39167\n        ],\n        \"115\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.39445\n        ],\n        \"116\": [\n            0,\n            0.61508,\n            0,\n            0,\n            0.38889\n        ],\n        \"117\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.55556\n        ],\n        \"118\": [\n            0,\n            0.43056,\n            0.01389,\n            0,\n            0.52778\n        ],\n        \"119\": [\n            0,\n            0.43056,\n            0.01389,\n            0,\n            0.72222\n        ],\n        \"120\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.52778\n        ],\n        \"121\": [\n            0.19444,\n            0.43056,\n            0.01389,\n            0,\n            0.52778\n        ],\n        \"122\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.44445\n        ],\n        \"123\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.5\n        ],\n        \"124\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.27778\n        ],\n        \"125\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.5\n        ],\n        \"126\": [\n            0.35,\n            0.31786,\n            0,\n            0,\n            0.5\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"163\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.76909\n        ],\n        \"167\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.44445\n        ],\n        \"168\": [\n            0,\n            0.66786,\n            0,\n            0,\n            0.5\n        ],\n        \"172\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.66667\n        ],\n        \"176\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.75\n        ],\n        \"177\": [\n            0.08333,\n            0.58333,\n            0,\n            0,\n            0.77778\n        ],\n        \"182\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.61111\n        ],\n        \"184\": [\n            0.17014,\n            0,\n            0,\n            0,\n            0.44445\n        ],\n        \"198\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.90278\n        ],\n        \"215\": [\n            0.08333,\n            0.58333,\n            0,\n            0,\n            0.77778\n        ],\n        \"216\": [\n            0.04861,\n            0.73194,\n            0,\n            0,\n            0.77778\n        ],\n        \"223\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"230\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.72222\n        ],\n        \"247\": [\n            0.08333,\n            0.58333,\n            0,\n            0,\n            0.77778\n        ],\n        \"248\": [\n            0.09722,\n            0.52778,\n            0,\n            0,\n            0.5\n        ],\n        \"305\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.27778\n        ],\n        \"338\": [\n            0,\n            0.68333,\n            0,\n            0,\n            1.01389\n        ],\n        \"339\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.77778\n        ],\n        \"567\": [\n            0.19444,\n            0.43056,\n            0,\n            0,\n            0.30556\n        ],\n        \"710\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"711\": [\n            0,\n            0.62847,\n            0,\n            0,\n            0.5\n        ],\n        \"713\": [\n            0,\n            0.56778,\n            0,\n            0,\n            0.5\n        ],\n        \"714\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"715\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"728\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"729\": [\n            0,\n            0.66786,\n            0,\n            0,\n            0.27778\n        ],\n        \"730\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.75\n        ],\n        \"732\": [\n            0,\n            0.66786,\n            0,\n            0,\n            0.5\n        ],\n        \"733\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"915\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.625\n        ],\n        \"916\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.83334\n        ],\n        \"920\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.77778\n        ],\n        \"923\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.69445\n        ],\n        \"926\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.66667\n        ],\n        \"928\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.75\n        ],\n        \"931\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.72222\n        ],\n        \"933\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.77778\n        ],\n        \"934\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.72222\n        ],\n        \"936\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.77778\n        ],\n        \"937\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.72222\n        ],\n        \"8211\": [\n            0,\n            0.43056,\n            0.02778,\n            0,\n            0.5\n        ],\n        \"8212\": [\n            0,\n            0.43056,\n            0.02778,\n            0,\n            1.0\n        ],\n        \"8216\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.27778\n        ],\n        \"8217\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.27778\n        ],\n        \"8220\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"8221\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"8224\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.44445\n        ],\n        \"8225\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.44445\n        ],\n        \"8230\": [\n            0,\n            0.123,\n            0,\n            0,\n            1.172\n        ],\n        \"8242\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.275\n        ],\n        \"8407\": [\n            0,\n            0.71444,\n            0.15382,\n            0,\n            0.5\n        ],\n        \"8463\": [\n            0,\n            0.68889,\n            0,\n            0,\n            0.54028\n        ],\n        \"8465\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.72222\n        ],\n        \"8467\": [\n            0,\n            0.69444,\n            0,\n            0.11111,\n            0.41667\n        ],\n        \"8472\": [\n            0.19444,\n            0.43056,\n            0,\n            0.11111,\n            0.63646\n        ],\n        \"8476\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.72222\n        ],\n        \"8501\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.61111\n        ],\n        \"8592\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8593\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"8594\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8595\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"8596\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8597\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.5\n        ],\n        \"8598\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            1.0\n        ],\n        \"8599\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            1.0\n        ],\n        \"8600\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            1.0\n        ],\n        \"8601\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            1.0\n        ],\n        \"8614\": [\n            0.011,\n            0.511,\n            0,\n            0,\n            1.0\n        ],\n        \"8617\": [\n            0.011,\n            0.511,\n            0,\n            0,\n            1.126\n        ],\n        \"8618\": [\n            0.011,\n            0.511,\n            0,\n            0,\n            1.126\n        ],\n        \"8636\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8637\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8640\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8641\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8652\": [\n            0.011,\n            0.671,\n            0,\n            0,\n            1.0\n        ],\n        \"8656\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8657\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.61111\n        ],\n        \"8658\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8659\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.61111\n        ],\n        \"8660\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            1.0\n        ],\n        \"8661\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.61111\n        ],\n        \"8704\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55556\n        ],\n        \"8706\": [\n            0,\n            0.69444,\n            0.05556,\n            0.08334,\n            0.5309\n        ],\n        \"8707\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55556\n        ],\n        \"8709\": [\n            0.05556,\n            0.75,\n            0,\n            0,\n            0.5\n        ],\n        \"8711\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.83334\n        ],\n        \"8712\": [\n            0.0391,\n            0.5391,\n            0,\n            0,\n            0.66667\n        ],\n        \"8715\": [\n            0.0391,\n            0.5391,\n            0,\n            0,\n            0.66667\n        ],\n        \"8722\": [\n            0.08333,\n            0.58333,\n            0,\n            0,\n            0.77778\n        ],\n        \"8723\": [\n            0.08333,\n            0.58333,\n            0,\n            0,\n            0.77778\n        ],\n        \"8725\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.5\n        ],\n        \"8726\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.5\n        ],\n        \"8727\": [\n            -0.03472,\n            0.46528,\n            0,\n            0,\n            0.5\n        ],\n        \"8728\": [\n            -0.05555,\n            0.44445,\n            0,\n            0,\n            0.5\n        ],\n        \"8729\": [\n            -0.05555,\n            0.44445,\n            0,\n            0,\n            0.5\n        ],\n        \"8730\": [\n            0.2,\n            0.8,\n            0,\n            0,\n            0.83334\n        ],\n        \"8733\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.77778\n        ],\n        \"8734\": [\n            0,\n            0.43056,\n            0,\n            0,\n            1.0\n        ],\n        \"8736\": [\n            0,\n            0.69224,\n            0,\n            0,\n            0.72222\n        ],\n        \"8739\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.27778\n        ],\n        \"8741\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.5\n        ],\n        \"8743\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.66667\n        ],\n        \"8744\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.66667\n        ],\n        \"8745\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.66667\n        ],\n        \"8746\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.66667\n        ],\n        \"8747\": [\n            0.19444,\n            0.69444,\n            0.11111,\n            0,\n            0.41667\n        ],\n        \"8764\": [\n            -0.13313,\n            0.36687,\n            0,\n            0,\n            0.77778\n        ],\n        \"8768\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.27778\n        ],\n        \"8771\": [\n            -0.03625,\n            0.46375,\n            0,\n            0,\n            0.77778\n        ],\n        \"8773\": [\n            -0.022,\n            0.589,\n            0,\n            0,\n            0.778\n        ],\n        \"8776\": [\n            -0.01688,\n            0.48312,\n            0,\n            0,\n            0.77778\n        ],\n        \"8781\": [\n            -0.03625,\n            0.46375,\n            0,\n            0,\n            0.77778\n        ],\n        \"8784\": [\n            -0.133,\n            0.673,\n            0,\n            0,\n            0.778\n        ],\n        \"8801\": [\n            -0.03625,\n            0.46375,\n            0,\n            0,\n            0.77778\n        ],\n        \"8804\": [\n            0.13597,\n            0.63597,\n            0,\n            0,\n            0.77778\n        ],\n        \"8805\": [\n            0.13597,\n            0.63597,\n            0,\n            0,\n            0.77778\n        ],\n        \"8810\": [\n            0.0391,\n            0.5391,\n            0,\n            0,\n            1.0\n        ],\n        \"8811\": [\n            0.0391,\n            0.5391,\n            0,\n            0,\n            1.0\n        ],\n        \"8826\": [\n            0.0391,\n            0.5391,\n            0,\n            0,\n            0.77778\n        ],\n        \"8827\": [\n            0.0391,\n            0.5391,\n            0,\n            0,\n            0.77778\n        ],\n        \"8834\": [\n            0.0391,\n            0.5391,\n            0,\n            0,\n            0.77778\n        ],\n        \"8835\": [\n            0.0391,\n            0.5391,\n            0,\n            0,\n            0.77778\n        ],\n        \"8838\": [\n            0.13597,\n            0.63597,\n            0,\n            0,\n            0.77778\n        ],\n        \"8839\": [\n            0.13597,\n            0.63597,\n            0,\n            0,\n            0.77778\n        ],\n        \"8846\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.66667\n        ],\n        \"8849\": [\n            0.13597,\n            0.63597,\n            0,\n            0,\n            0.77778\n        ],\n        \"8850\": [\n            0.13597,\n            0.63597,\n            0,\n            0,\n            0.77778\n        ],\n        \"8851\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.66667\n        ],\n        \"8852\": [\n            0,\n            0.55556,\n            0,\n            0,\n            0.66667\n        ],\n        \"8853\": [\n            0.08333,\n            0.58333,\n            0,\n            0,\n            0.77778\n        ],\n        \"8854\": [\n            0.08333,\n            0.58333,\n            0,\n            0,\n            0.77778\n        ],\n        \"8855\": [\n            0.08333,\n            0.58333,\n            0,\n            0,\n            0.77778\n        ],\n        \"8856\": [\n            0.08333,\n            0.58333,\n            0,\n            0,\n            0.77778\n        ],\n        \"8857\": [\n            0.08333,\n            0.58333,\n            0,\n            0,\n            0.77778\n        ],\n        \"8866\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.61111\n        ],\n        \"8867\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.61111\n        ],\n        \"8868\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.77778\n        ],\n        \"8869\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.77778\n        ],\n        \"8872\": [\n            0.249,\n            0.75,\n            0,\n            0,\n            0.867\n        ],\n        \"8900\": [\n            -0.05555,\n            0.44445,\n            0,\n            0,\n            0.5\n        ],\n        \"8901\": [\n            -0.05555,\n            0.44445,\n            0,\n            0,\n            0.27778\n        ],\n        \"8902\": [\n            -0.03472,\n            0.46528,\n            0,\n            0,\n            0.5\n        ],\n        \"8904\": [\n            0.005,\n            0.505,\n            0,\n            0,\n            0.9\n        ],\n        \"8942\": [\n            0.03,\n            0.903,\n            0,\n            0,\n            0.278\n        ],\n        \"8943\": [\n            -0.19,\n            0.313,\n            0,\n            0,\n            1.172\n        ],\n        \"8945\": [\n            -0.1,\n            0.823,\n            0,\n            0,\n            1.282\n        ],\n        \"8968\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.44445\n        ],\n        \"8969\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.44445\n        ],\n        \"8970\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.44445\n        ],\n        \"8971\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.44445\n        ],\n        \"8994\": [\n            -0.14236,\n            0.35764,\n            0,\n            0,\n            1.0\n        ],\n        \"8995\": [\n            -0.14236,\n            0.35764,\n            0,\n            0,\n            1.0\n        ],\n        \"9136\": [\n            0.244,\n            0.744,\n            0,\n            0,\n            0.412\n        ],\n        \"9137\": [\n            0.244,\n            0.745,\n            0,\n            0,\n            0.412\n        ],\n        \"9651\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.88889\n        ],\n        \"9657\": [\n            -0.03472,\n            0.46528,\n            0,\n            0,\n            0.5\n        ],\n        \"9661\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.88889\n        ],\n        \"9667\": [\n            -0.03472,\n            0.46528,\n            0,\n            0,\n            0.5\n        ],\n        \"9711\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            1.0\n        ],\n        \"9824\": [\n            0.12963,\n            0.69444,\n            0,\n            0,\n            0.77778\n        ],\n        \"9825\": [\n            0.12963,\n            0.69444,\n            0,\n            0,\n            0.77778\n        ],\n        \"9826\": [\n            0.12963,\n            0.69444,\n            0,\n            0,\n            0.77778\n        ],\n        \"9827\": [\n            0.12963,\n            0.69444,\n            0,\n            0,\n            0.77778\n        ],\n        \"9837\": [\n            0,\n            0.75,\n            0,\n            0,\n            0.38889\n        ],\n        \"9838\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.38889\n        ],\n        \"9839\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.38889\n        ],\n        \"10216\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.38889\n        ],\n        \"10217\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.38889\n        ],\n        \"10222\": [\n            0.244,\n            0.744,\n            0,\n            0,\n            0.412\n        ],\n        \"10223\": [\n            0.244,\n            0.745,\n            0,\n            0,\n            0.412\n        ],\n        \"10229\": [\n            0.011,\n            0.511,\n            0,\n            0,\n            1.609\n        ],\n        \"10230\": [\n            0.011,\n            0.511,\n            0,\n            0,\n            1.638\n        ],\n        \"10231\": [\n            0.011,\n            0.511,\n            0,\n            0,\n            1.859\n        ],\n        \"10232\": [\n            0.024,\n            0.525,\n            0,\n            0,\n            1.609\n        ],\n        \"10233\": [\n            0.024,\n            0.525,\n            0,\n            0,\n            1.638\n        ],\n        \"10234\": [\n            0.024,\n            0.525,\n            0,\n            0,\n            1.858\n        ],\n        \"10236\": [\n            0.011,\n            0.511,\n            0,\n            0,\n            1.638\n        ],\n        \"10815\": [\n            0,\n            0.68333,\n            0,\n            0,\n            0.75\n        ],\n        \"10927\": [\n            0.13597,\n            0.63597,\n            0,\n            0,\n            0.77778\n        ],\n        \"10928\": [\n            0.13597,\n            0.63597,\n            0,\n            0,\n            0.77778\n        ],\n        \"57376\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0\n        ]\n    },\n    \"Math-BoldItalic\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"48\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.575\n        ],\n        \"49\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.575\n        ],\n        \"50\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.575\n        ],\n        \"51\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.575\n        ],\n        \"52\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.575\n        ],\n        \"53\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.575\n        ],\n        \"54\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.575\n        ],\n        \"55\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.575\n        ],\n        \"56\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.575\n        ],\n        \"57\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.575\n        ],\n        \"65\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.86944\n        ],\n        \"66\": [\n            0,\n            0.68611,\n            0.04835,\n            0,\n            0.8664\n        ],\n        \"67\": [\n            0,\n            0.68611,\n            0.06979,\n            0,\n            0.81694\n        ],\n        \"68\": [\n            0,\n            0.68611,\n            0.03194,\n            0,\n            0.93812\n        ],\n        \"69\": [\n            0,\n            0.68611,\n            0.05451,\n            0,\n            0.81007\n        ],\n        \"70\": [\n            0,\n            0.68611,\n            0.15972,\n            0,\n            0.68889\n        ],\n        \"71\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.88673\n        ],\n        \"72\": [\n            0,\n            0.68611,\n            0.08229,\n            0,\n            0.98229\n        ],\n        \"73\": [\n            0,\n            0.68611,\n            0.07778,\n            0,\n            0.51111\n        ],\n        \"74\": [\n            0,\n            0.68611,\n            0.10069,\n            0,\n            0.63125\n        ],\n        \"75\": [\n            0,\n            0.68611,\n            0.06979,\n            0,\n            0.97118\n        ],\n        \"76\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.75555\n        ],\n        \"77\": [\n            0,\n            0.68611,\n            0.11424,\n            0,\n            1.14201\n        ],\n        \"78\": [\n            0,\n            0.68611,\n            0.11424,\n            0,\n            0.95034\n        ],\n        \"79\": [\n            0,\n            0.68611,\n            0.03194,\n            0,\n            0.83666\n        ],\n        \"80\": [\n            0,\n            0.68611,\n            0.15972,\n            0,\n            0.72309\n        ],\n        \"81\": [\n            0.19444,\n            0.68611,\n            0,\n            0,\n            0.86861\n        ],\n        \"82\": [\n            0,\n            0.68611,\n            0.00421,\n            0,\n            0.87235\n        ],\n        \"83\": [\n            0,\n            0.68611,\n            0.05382,\n            0,\n            0.69271\n        ],\n        \"84\": [\n            0,\n            0.68611,\n            0.15972,\n            0,\n            0.63663\n        ],\n        \"85\": [\n            0,\n            0.68611,\n            0.11424,\n            0,\n            0.80027\n        ],\n        \"86\": [\n            0,\n            0.68611,\n            0.25555,\n            0,\n            0.67778\n        ],\n        \"87\": [\n            0,\n            0.68611,\n            0.15972,\n            0,\n            1.09305\n        ],\n        \"88\": [\n            0,\n            0.68611,\n            0.07778,\n            0,\n            0.94722\n        ],\n        \"89\": [\n            0,\n            0.68611,\n            0.25555,\n            0,\n            0.67458\n        ],\n        \"90\": [\n            0,\n            0.68611,\n            0.06979,\n            0,\n            0.77257\n        ],\n        \"97\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.63287\n        ],\n        \"98\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.52083\n        ],\n        \"99\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.51342\n        ],\n        \"100\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.60972\n        ],\n        \"101\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.55361\n        ],\n        \"102\": [\n            0.19444,\n            0.69444,\n            0.11042,\n            0,\n            0.56806\n        ],\n        \"103\": [\n            0.19444,\n            0.44444,\n            0.03704,\n            0,\n            0.5449\n        ],\n        \"104\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.66759\n        ],\n        \"105\": [\n            0,\n            0.69326,\n            0,\n            0,\n            0.4048\n        ],\n        \"106\": [\n            0.19444,\n            0.69326,\n            0.0622,\n            0,\n            0.47083\n        ],\n        \"107\": [\n            0,\n            0.69444,\n            0.01852,\n            0,\n            0.6037\n        ],\n        \"108\": [\n            0,\n            0.69444,\n            0.0088,\n            0,\n            0.34815\n        ],\n        \"109\": [\n            0,\n            0.44444,\n            0,\n            0,\n            1.0324\n        ],\n        \"110\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.71296\n        ],\n        \"111\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.58472\n        ],\n        \"112\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.60092\n        ],\n        \"113\": [\n            0.19444,\n            0.44444,\n            0.03704,\n            0,\n            0.54213\n        ],\n        \"114\": [\n            0,\n            0.44444,\n            0.03194,\n            0,\n            0.5287\n        ],\n        \"115\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.53125\n        ],\n        \"116\": [\n            0,\n            0.63492,\n            0,\n            0,\n            0.41528\n        ],\n        \"117\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.68102\n        ],\n        \"118\": [\n            0,\n            0.44444,\n            0.03704,\n            0,\n            0.56666\n        ],\n        \"119\": [\n            0,\n            0.44444,\n            0.02778,\n            0,\n            0.83148\n        ],\n        \"120\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.65903\n        ],\n        \"121\": [\n            0.19444,\n            0.44444,\n            0.03704,\n            0,\n            0.59028\n        ],\n        \"122\": [\n            0,\n            0.44444,\n            0.04213,\n            0,\n            0.55509\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"915\": [\n            0,\n            0.68611,\n            0.15972,\n            0,\n            0.65694\n        ],\n        \"916\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.95833\n        ],\n        \"920\": [\n            0,\n            0.68611,\n            0.03194,\n            0,\n            0.86722\n        ],\n        \"923\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.80555\n        ],\n        \"926\": [\n            0,\n            0.68611,\n            0.07458,\n            0,\n            0.84125\n        ],\n        \"928\": [\n            0,\n            0.68611,\n            0.08229,\n            0,\n            0.98229\n        ],\n        \"931\": [\n            0,\n            0.68611,\n            0.05451,\n            0,\n            0.88507\n        ],\n        \"933\": [\n            0,\n            0.68611,\n            0.15972,\n            0,\n            0.67083\n        ],\n        \"934\": [\n            0,\n            0.68611,\n            0,\n            0,\n            0.76666\n        ],\n        \"936\": [\n            0,\n            0.68611,\n            0.11653,\n            0,\n            0.71402\n        ],\n        \"937\": [\n            0,\n            0.68611,\n            0.04835,\n            0,\n            0.8789\n        ],\n        \"945\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.76064\n        ],\n        \"946\": [\n            0.19444,\n            0.69444,\n            0.03403,\n            0,\n            0.65972\n        ],\n        \"947\": [\n            0.19444,\n            0.44444,\n            0.06389,\n            0,\n            0.59003\n        ],\n        \"948\": [\n            0,\n            0.69444,\n            0.03819,\n            0,\n            0.52222\n        ],\n        \"949\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.52882\n        ],\n        \"950\": [\n            0.19444,\n            0.69444,\n            0.06215,\n            0,\n            0.50833\n        ],\n        \"951\": [\n            0.19444,\n            0.44444,\n            0.03704,\n            0,\n            0.6\n        ],\n        \"952\": [\n            0,\n            0.69444,\n            0.03194,\n            0,\n            0.5618\n        ],\n        \"953\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.41204\n        ],\n        \"954\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.66759\n        ],\n        \"955\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.67083\n        ],\n        \"956\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.70787\n        ],\n        \"957\": [\n            0,\n            0.44444,\n            0.06898,\n            0,\n            0.57685\n        ],\n        \"958\": [\n            0.19444,\n            0.69444,\n            0.03021,\n            0,\n            0.50833\n        ],\n        \"959\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.58472\n        ],\n        \"960\": [\n            0,\n            0.44444,\n            0.03704,\n            0,\n            0.68241\n        ],\n        \"961\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.6118\n        ],\n        \"962\": [\n            0.09722,\n            0.44444,\n            0.07917,\n            0,\n            0.42361\n        ],\n        \"963\": [\n            0,\n            0.44444,\n            0.03704,\n            0,\n            0.68588\n        ],\n        \"964\": [\n            0,\n            0.44444,\n            0.13472,\n            0,\n            0.52083\n        ],\n        \"965\": [\n            0,\n            0.44444,\n            0.03704,\n            0,\n            0.63055\n        ],\n        \"966\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.74722\n        ],\n        \"967\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.71805\n        ],\n        \"968\": [\n            0.19444,\n            0.69444,\n            0.03704,\n            0,\n            0.75833\n        ],\n        \"969\": [\n            0,\n            0.44444,\n            0.03704,\n            0,\n            0.71782\n        ],\n        \"977\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.69155\n        ],\n        \"981\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.7125\n        ],\n        \"982\": [\n            0,\n            0.44444,\n            0.03194,\n            0,\n            0.975\n        ],\n        \"1009\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.6118\n        ],\n        \"1013\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.48333\n        ],\n        \"57649\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.39352\n        ],\n        \"57911\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.43889\n        ]\n    },\n    \"Math-Italic\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"48\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.5\n        ],\n        \"49\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.5\n        ],\n        \"50\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.5\n        ],\n        \"51\": [\n            0.19444,\n            0.43056,\n            0,\n            0,\n            0.5\n        ],\n        \"52\": [\n            0.19444,\n            0.43056,\n            0,\n            0,\n            0.5\n        ],\n        \"53\": [\n            0.19444,\n            0.43056,\n            0,\n            0,\n            0.5\n        ],\n        \"54\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.5\n        ],\n        \"55\": [\n            0.19444,\n            0.43056,\n            0,\n            0,\n            0.5\n        ],\n        \"56\": [\n            0,\n            0.64444,\n            0,\n            0,\n            0.5\n        ],\n        \"57\": [\n            0.19444,\n            0.43056,\n            0,\n            0,\n            0.5\n        ],\n        \"65\": [\n            0,\n            0.68333,\n            0,\n            0.13889,\n            0.75\n        ],\n        \"66\": [\n            0,\n            0.68333,\n            0.05017,\n            0.08334,\n            0.75851\n        ],\n        \"67\": [\n            0,\n            0.68333,\n            0.07153,\n            0.08334,\n            0.71472\n        ],\n        \"68\": [\n            0,\n            0.68333,\n            0.02778,\n            0.05556,\n            0.82792\n        ],\n        \"69\": [\n            0,\n            0.68333,\n            0.05764,\n            0.08334,\n            0.7382\n        ],\n        \"70\": [\n            0,\n            0.68333,\n            0.13889,\n            0.08334,\n            0.64306\n        ],\n        \"71\": [\n            0,\n            0.68333,\n            0,\n            0.08334,\n            0.78625\n        ],\n        \"72\": [\n            0,\n            0.68333,\n            0.08125,\n            0.05556,\n            0.83125\n        ],\n        \"73\": [\n            0,\n            0.68333,\n            0.07847,\n            0.11111,\n            0.43958\n        ],\n        \"74\": [\n            0,\n            0.68333,\n            0.09618,\n            0.16667,\n            0.55451\n        ],\n        \"75\": [\n            0,\n            0.68333,\n            0.07153,\n            0.05556,\n            0.84931\n        ],\n        \"76\": [\n            0,\n            0.68333,\n            0,\n            0.02778,\n            0.68056\n        ],\n        \"77\": [\n            0,\n            0.68333,\n            0.10903,\n            0.08334,\n            0.97014\n        ],\n        \"78\": [\n            0,\n            0.68333,\n            0.10903,\n            0.08334,\n            0.80347\n        ],\n        \"79\": [\n            0,\n            0.68333,\n            0.02778,\n            0.08334,\n            0.76278\n        ],\n        \"80\": [\n            0,\n            0.68333,\n            0.13889,\n            0.08334,\n            0.64201\n        ],\n        \"81\": [\n            0.19444,\n            0.68333,\n            0,\n            0.08334,\n            0.79056\n        ],\n        \"82\": [\n            0,\n            0.68333,\n            0.00773,\n            0.08334,\n            0.75929\n        ],\n        \"83\": [\n            0,\n            0.68333,\n            0.05764,\n            0.08334,\n            0.6132\n        ],\n        \"84\": [\n            0,\n            0.68333,\n            0.13889,\n            0.08334,\n            0.58438\n        ],\n        \"85\": [\n            0,\n            0.68333,\n            0.10903,\n            0.02778,\n            0.68278\n        ],\n        \"86\": [\n            0,\n            0.68333,\n            0.22222,\n            0,\n            0.58333\n        ],\n        \"87\": [\n            0,\n            0.68333,\n            0.13889,\n            0,\n            0.94445\n        ],\n        \"88\": [\n            0,\n            0.68333,\n            0.07847,\n            0.08334,\n            0.82847\n        ],\n        \"89\": [\n            0,\n            0.68333,\n            0.22222,\n            0,\n            0.58056\n        ],\n        \"90\": [\n            0,\n            0.68333,\n            0.07153,\n            0.08334,\n            0.68264\n        ],\n        \"97\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.52859\n        ],\n        \"98\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.42917\n        ],\n        \"99\": [\n            0,\n            0.43056,\n            0,\n            0.05556,\n            0.43276\n        ],\n        \"100\": [\n            0,\n            0.69444,\n            0,\n            0.16667,\n            0.52049\n        ],\n        \"101\": [\n            0,\n            0.43056,\n            0,\n            0.05556,\n            0.46563\n        ],\n        \"102\": [\n            0.19444,\n            0.69444,\n            0.10764,\n            0.16667,\n            0.48959\n        ],\n        \"103\": [\n            0.19444,\n            0.43056,\n            0.03588,\n            0.02778,\n            0.47697\n        ],\n        \"104\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.57616\n        ],\n        \"105\": [\n            0,\n            0.65952,\n            0,\n            0,\n            0.34451\n        ],\n        \"106\": [\n            0.19444,\n            0.65952,\n            0.05724,\n            0,\n            0.41181\n        ],\n        \"107\": [\n            0,\n            0.69444,\n            0.03148,\n            0,\n            0.5206\n        ],\n        \"108\": [\n            0,\n            0.69444,\n            0.01968,\n            0.08334,\n            0.29838\n        ],\n        \"109\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.87801\n        ],\n        \"110\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.60023\n        ],\n        \"111\": [\n            0,\n            0.43056,\n            0,\n            0.05556,\n            0.48472\n        ],\n        \"112\": [\n            0.19444,\n            0.43056,\n            0,\n            0.08334,\n            0.50313\n        ],\n        \"113\": [\n            0.19444,\n            0.43056,\n            0.03588,\n            0.08334,\n            0.44641\n        ],\n        \"114\": [\n            0,\n            0.43056,\n            0.02778,\n            0.05556,\n            0.45116\n        ],\n        \"115\": [\n            0,\n            0.43056,\n            0,\n            0.05556,\n            0.46875\n        ],\n        \"116\": [\n            0,\n            0.61508,\n            0,\n            0.08334,\n            0.36111\n        ],\n        \"117\": [\n            0,\n            0.43056,\n            0,\n            0.02778,\n            0.57246\n        ],\n        \"118\": [\n            0,\n            0.43056,\n            0.03588,\n            0.02778,\n            0.48472\n        ],\n        \"119\": [\n            0,\n            0.43056,\n            0.02691,\n            0.08334,\n            0.71592\n        ],\n        \"120\": [\n            0,\n            0.43056,\n            0,\n            0.02778,\n            0.57153\n        ],\n        \"121\": [\n            0.19444,\n            0.43056,\n            0.03588,\n            0.05556,\n            0.49028\n        ],\n        \"122\": [\n            0,\n            0.43056,\n            0.04398,\n            0.05556,\n            0.46505\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"915\": [\n            0,\n            0.68333,\n            0.13889,\n            0.08334,\n            0.61528\n        ],\n        \"916\": [\n            0,\n            0.68333,\n            0,\n            0.16667,\n            0.83334\n        ],\n        \"920\": [\n            0,\n            0.68333,\n            0.02778,\n            0.08334,\n            0.76278\n        ],\n        \"923\": [\n            0,\n            0.68333,\n            0,\n            0.16667,\n            0.69445\n        ],\n        \"926\": [\n            0,\n            0.68333,\n            0.07569,\n            0.08334,\n            0.74236\n        ],\n        \"928\": [\n            0,\n            0.68333,\n            0.08125,\n            0.05556,\n            0.83125\n        ],\n        \"931\": [\n            0,\n            0.68333,\n            0.05764,\n            0.08334,\n            0.77986\n        ],\n        \"933\": [\n            0,\n            0.68333,\n            0.13889,\n            0.05556,\n            0.58333\n        ],\n        \"934\": [\n            0,\n            0.68333,\n            0,\n            0.08334,\n            0.66667\n        ],\n        \"936\": [\n            0,\n            0.68333,\n            0.11,\n            0.05556,\n            0.61222\n        ],\n        \"937\": [\n            0,\n            0.68333,\n            0.05017,\n            0.08334,\n            0.7724\n        ],\n        \"945\": [\n            0,\n            0.43056,\n            0.0037,\n            0.02778,\n            0.6397\n        ],\n        \"946\": [\n            0.19444,\n            0.69444,\n            0.05278,\n            0.08334,\n            0.56563\n        ],\n        \"947\": [\n            0.19444,\n            0.43056,\n            0.05556,\n            0,\n            0.51773\n        ],\n        \"948\": [\n            0,\n            0.69444,\n            0.03785,\n            0.05556,\n            0.44444\n        ],\n        \"949\": [\n            0,\n            0.43056,\n            0,\n            0.08334,\n            0.46632\n        ],\n        \"950\": [\n            0.19444,\n            0.69444,\n            0.07378,\n            0.08334,\n            0.4375\n        ],\n        \"951\": [\n            0.19444,\n            0.43056,\n            0.03588,\n            0.05556,\n            0.49653\n        ],\n        \"952\": [\n            0,\n            0.69444,\n            0.02778,\n            0.08334,\n            0.46944\n        ],\n        \"953\": [\n            0,\n            0.43056,\n            0,\n            0.05556,\n            0.35394\n        ],\n        \"954\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.57616\n        ],\n        \"955\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.58334\n        ],\n        \"956\": [\n            0.19444,\n            0.43056,\n            0,\n            0.02778,\n            0.60255\n        ],\n        \"957\": [\n            0,\n            0.43056,\n            0.06366,\n            0.02778,\n            0.49398\n        ],\n        \"958\": [\n            0.19444,\n            0.69444,\n            0.04601,\n            0.11111,\n            0.4375\n        ],\n        \"959\": [\n            0,\n            0.43056,\n            0,\n            0.05556,\n            0.48472\n        ],\n        \"960\": [\n            0,\n            0.43056,\n            0.03588,\n            0,\n            0.57003\n        ],\n        \"961\": [\n            0.19444,\n            0.43056,\n            0,\n            0.08334,\n            0.51702\n        ],\n        \"962\": [\n            0.09722,\n            0.43056,\n            0.07986,\n            0.08334,\n            0.36285\n        ],\n        \"963\": [\n            0,\n            0.43056,\n            0.03588,\n            0,\n            0.57141\n        ],\n        \"964\": [\n            0,\n            0.43056,\n            0.1132,\n            0.02778,\n            0.43715\n        ],\n        \"965\": [\n            0,\n            0.43056,\n            0.03588,\n            0.02778,\n            0.54028\n        ],\n        \"966\": [\n            0.19444,\n            0.43056,\n            0,\n            0.08334,\n            0.65417\n        ],\n        \"967\": [\n            0.19444,\n            0.43056,\n            0,\n            0.05556,\n            0.62569\n        ],\n        \"968\": [\n            0.19444,\n            0.69444,\n            0.03588,\n            0.11111,\n            0.65139\n        ],\n        \"969\": [\n            0,\n            0.43056,\n            0.03588,\n            0,\n            0.62245\n        ],\n        \"977\": [\n            0,\n            0.69444,\n            0,\n            0.08334,\n            0.59144\n        ],\n        \"981\": [\n            0.19444,\n            0.69444,\n            0,\n            0.08334,\n            0.59583\n        ],\n        \"982\": [\n            0,\n            0.43056,\n            0.02778,\n            0,\n            0.82813\n        ],\n        \"1009\": [\n            0.19444,\n            0.43056,\n            0,\n            0.08334,\n            0.51702\n        ],\n        \"1013\": [\n            0,\n            0.43056,\n            0,\n            0.05556,\n            0.4059\n        ],\n        \"57649\": [\n            0,\n            0.43056,\n            0,\n            0.02778,\n            0.32246\n        ],\n        \"57911\": [\n            0.19444,\n            0.43056,\n            0,\n            0.08334,\n            0.38403\n        ]\n    },\n    \"SansSerif-Bold\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"33\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.36667\n        ],\n        \"34\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55834\n        ],\n        \"35\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.91667\n        ],\n        \"36\": [\n            0.05556,\n            0.75,\n            0,\n            0,\n            0.55\n        ],\n        \"37\": [\n            0.05556,\n            0.75,\n            0,\n            0,\n            1.02912\n        ],\n        \"38\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.83056\n        ],\n        \"39\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.30556\n        ],\n        \"40\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.42778\n        ],\n        \"41\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.42778\n        ],\n        \"42\": [\n            0,\n            0.75,\n            0,\n            0,\n            0.55\n        ],\n        \"43\": [\n            0.11667,\n            0.61667,\n            0,\n            0,\n            0.85556\n        ],\n        \"44\": [\n            0.10556,\n            0.13056,\n            0,\n            0,\n            0.30556\n        ],\n        \"45\": [\n            0,\n            0.45833,\n            0,\n            0,\n            0.36667\n        ],\n        \"46\": [\n            0,\n            0.13056,\n            0,\n            0,\n            0.30556\n        ],\n        \"47\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.55\n        ],\n        \"48\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"49\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"50\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"51\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"52\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"53\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"54\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"55\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"56\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"57\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"58\": [\n            0,\n            0.45833,\n            0,\n            0,\n            0.30556\n        ],\n        \"59\": [\n            0.10556,\n            0.45833,\n            0,\n            0,\n            0.30556\n        ],\n        \"61\": [\n            -0.09375,\n            0.40625,\n            0,\n            0,\n            0.85556\n        ],\n        \"63\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.51945\n        ],\n        \"64\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.73334\n        ],\n        \"65\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.73334\n        ],\n        \"66\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.73334\n        ],\n        \"67\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.70278\n        ],\n        \"68\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.79445\n        ],\n        \"69\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.64167\n        ],\n        \"70\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.61111\n        ],\n        \"71\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.73334\n        ],\n        \"72\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.79445\n        ],\n        \"73\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.33056\n        ],\n        \"74\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.51945\n        ],\n        \"75\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.76389\n        ],\n        \"76\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.58056\n        ],\n        \"77\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.97778\n        ],\n        \"78\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.79445\n        ],\n        \"79\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.79445\n        ],\n        \"80\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.70278\n        ],\n        \"81\": [\n            0.10556,\n            0.69444,\n            0,\n            0,\n            0.79445\n        ],\n        \"82\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.70278\n        ],\n        \"83\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.61111\n        ],\n        \"84\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.73334\n        ],\n        \"85\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.76389\n        ],\n        \"86\": [\n            0,\n            0.69444,\n            0.01528,\n            0,\n            0.73334\n        ],\n        \"87\": [\n            0,\n            0.69444,\n            0.01528,\n            0,\n            1.03889\n        ],\n        \"88\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.73334\n        ],\n        \"89\": [\n            0,\n            0.69444,\n            0.0275,\n            0,\n            0.73334\n        ],\n        \"90\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.67223\n        ],\n        \"91\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.34306\n        ],\n        \"93\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.34306\n        ],\n        \"94\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"95\": [\n            0.35,\n            0.10833,\n            0.03056,\n            0,\n            0.55\n        ],\n        \"97\": [\n            0,\n            0.45833,\n            0,\n            0,\n            0.525\n        ],\n        \"98\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.56111\n        ],\n        \"99\": [\n            0,\n            0.45833,\n            0,\n            0,\n            0.48889\n        ],\n        \"100\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.56111\n        ],\n        \"101\": [\n            0,\n            0.45833,\n            0,\n            0,\n            0.51111\n        ],\n        \"102\": [\n            0,\n            0.69444,\n            0.07639,\n            0,\n            0.33611\n        ],\n        \"103\": [\n            0.19444,\n            0.45833,\n            0.01528,\n            0,\n            0.55\n        ],\n        \"104\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.56111\n        ],\n        \"105\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.25556\n        ],\n        \"106\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.28611\n        ],\n        \"107\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.53056\n        ],\n        \"108\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.25556\n        ],\n        \"109\": [\n            0,\n            0.45833,\n            0,\n            0,\n            0.86667\n        ],\n        \"110\": [\n            0,\n            0.45833,\n            0,\n            0,\n            0.56111\n        ],\n        \"111\": [\n            0,\n            0.45833,\n            0,\n            0,\n            0.55\n        ],\n        \"112\": [\n            0.19444,\n            0.45833,\n            0,\n            0,\n            0.56111\n        ],\n        \"113\": [\n            0.19444,\n            0.45833,\n            0,\n            0,\n            0.56111\n        ],\n        \"114\": [\n            0,\n            0.45833,\n            0.01528,\n            0,\n            0.37222\n        ],\n        \"115\": [\n            0,\n            0.45833,\n            0,\n            0,\n            0.42167\n        ],\n        \"116\": [\n            0,\n            0.58929,\n            0,\n            0,\n            0.40417\n        ],\n        \"117\": [\n            0,\n            0.45833,\n            0,\n            0,\n            0.56111\n        ],\n        \"118\": [\n            0,\n            0.45833,\n            0.01528,\n            0,\n            0.5\n        ],\n        \"119\": [\n            0,\n            0.45833,\n            0.01528,\n            0,\n            0.74445\n        ],\n        \"120\": [\n            0,\n            0.45833,\n            0,\n            0,\n            0.5\n        ],\n        \"121\": [\n            0.19444,\n            0.45833,\n            0.01528,\n            0,\n            0.5\n        ],\n        \"122\": [\n            0,\n            0.45833,\n            0,\n            0,\n            0.47639\n        ],\n        \"126\": [\n            0.35,\n            0.34444,\n            0,\n            0,\n            0.55\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"168\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"176\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.73334\n        ],\n        \"180\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"184\": [\n            0.17014,\n            0,\n            0,\n            0,\n            0.48889\n        ],\n        \"305\": [\n            0,\n            0.45833,\n            0,\n            0,\n            0.25556\n        ],\n        \"567\": [\n            0.19444,\n            0.45833,\n            0,\n            0,\n            0.28611\n        ],\n        \"710\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"711\": [\n            0,\n            0.63542,\n            0,\n            0,\n            0.55\n        ],\n        \"713\": [\n            0,\n            0.63778,\n            0,\n            0,\n            0.55\n        ],\n        \"728\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"729\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.30556\n        ],\n        \"730\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.73334\n        ],\n        \"732\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"733\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55\n        ],\n        \"915\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.58056\n        ],\n        \"916\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.91667\n        ],\n        \"920\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.85556\n        ],\n        \"923\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.67223\n        ],\n        \"926\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.73334\n        ],\n        \"928\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.79445\n        ],\n        \"931\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.79445\n        ],\n        \"933\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.85556\n        ],\n        \"934\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.79445\n        ],\n        \"936\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.85556\n        ],\n        \"937\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.79445\n        ],\n        \"8211\": [\n            0,\n            0.45833,\n            0.03056,\n            0,\n            0.55\n        ],\n        \"8212\": [\n            0,\n            0.45833,\n            0.03056,\n            0,\n            1.10001\n        ],\n        \"8216\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.30556\n        ],\n        \"8217\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.30556\n        ],\n        \"8220\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55834\n        ],\n        \"8221\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55834\n        ]\n    },\n    \"SansSerif-Italic\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"33\": [\n            0,\n            0.69444,\n            0.05733,\n            0,\n            0.31945\n        ],\n        \"34\": [\n            0,\n            0.69444,\n            0.00316,\n            0,\n            0.5\n        ],\n        \"35\": [\n            0.19444,\n            0.69444,\n            0.05087,\n            0,\n            0.83334\n        ],\n        \"36\": [\n            0.05556,\n            0.75,\n            0.11156,\n            0,\n            0.5\n        ],\n        \"37\": [\n            0.05556,\n            0.75,\n            0.03126,\n            0,\n            0.83334\n        ],\n        \"38\": [\n            0,\n            0.69444,\n            0.03058,\n            0,\n            0.75834\n        ],\n        \"39\": [\n            0,\n            0.69444,\n            0.07816,\n            0,\n            0.27778\n        ],\n        \"40\": [\n            0.25,\n            0.75,\n            0.13164,\n            0,\n            0.38889\n        ],\n        \"41\": [\n            0.25,\n            0.75,\n            0.02536,\n            0,\n            0.38889\n        ],\n        \"42\": [\n            0,\n            0.75,\n            0.11775,\n            0,\n            0.5\n        ],\n        \"43\": [\n            0.08333,\n            0.58333,\n            0.02536,\n            0,\n            0.77778\n        ],\n        \"44\": [\n            0.125,\n            0.08333,\n            0,\n            0,\n            0.27778\n        ],\n        \"45\": [\n            0,\n            0.44444,\n            0.01946,\n            0,\n            0.33333\n        ],\n        \"46\": [\n            0,\n            0.08333,\n            0,\n            0,\n            0.27778\n        ],\n        \"47\": [\n            0.25,\n            0.75,\n            0.13164,\n            0,\n            0.5\n        ],\n        \"48\": [\n            0,\n            0.65556,\n            0.11156,\n            0,\n            0.5\n        ],\n        \"49\": [\n            0,\n            0.65556,\n            0.11156,\n            0,\n            0.5\n        ],\n        \"50\": [\n            0,\n            0.65556,\n            0.11156,\n            0,\n            0.5\n        ],\n        \"51\": [\n            0,\n            0.65556,\n            0.11156,\n            0,\n            0.5\n        ],\n        \"52\": [\n            0,\n            0.65556,\n            0.11156,\n            0,\n            0.5\n        ],\n        \"53\": [\n            0,\n            0.65556,\n            0.11156,\n            0,\n            0.5\n        ],\n        \"54\": [\n            0,\n            0.65556,\n            0.11156,\n            0,\n            0.5\n        ],\n        \"55\": [\n            0,\n            0.65556,\n            0.11156,\n            0,\n            0.5\n        ],\n        \"56\": [\n            0,\n            0.65556,\n            0.11156,\n            0,\n            0.5\n        ],\n        \"57\": [\n            0,\n            0.65556,\n            0.11156,\n            0,\n            0.5\n        ],\n        \"58\": [\n            0,\n            0.44444,\n            0.02502,\n            0,\n            0.27778\n        ],\n        \"59\": [\n            0.125,\n            0.44444,\n            0.02502,\n            0,\n            0.27778\n        ],\n        \"61\": [\n            -0.13,\n            0.37,\n            0.05087,\n            0,\n            0.77778\n        ],\n        \"63\": [\n            0,\n            0.69444,\n            0.11809,\n            0,\n            0.47222\n        ],\n        \"64\": [\n            0,\n            0.69444,\n            0.07555,\n            0,\n            0.66667\n        ],\n        \"65\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.66667\n        ],\n        \"66\": [\n            0,\n            0.69444,\n            0.08293,\n            0,\n            0.66667\n        ],\n        \"67\": [\n            0,\n            0.69444,\n            0.11983,\n            0,\n            0.63889\n        ],\n        \"68\": [\n            0,\n            0.69444,\n            0.07555,\n            0,\n            0.72223\n        ],\n        \"69\": [\n            0,\n            0.69444,\n            0.11983,\n            0,\n            0.59722\n        ],\n        \"70\": [\n            0,\n            0.69444,\n            0.13372,\n            0,\n            0.56945\n        ],\n        \"71\": [\n            0,\n            0.69444,\n            0.11983,\n            0,\n            0.66667\n        ],\n        \"72\": [\n            0,\n            0.69444,\n            0.08094,\n            0,\n            0.70834\n        ],\n        \"73\": [\n            0,\n            0.69444,\n            0.13372,\n            0,\n            0.27778\n        ],\n        \"74\": [\n            0,\n            0.69444,\n            0.08094,\n            0,\n            0.47222\n        ],\n        \"75\": [\n            0,\n            0.69444,\n            0.11983,\n            0,\n            0.69445\n        ],\n        \"76\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.54167\n        ],\n        \"77\": [\n            0,\n            0.69444,\n            0.08094,\n            0,\n            0.875\n        ],\n        \"78\": [\n            0,\n            0.69444,\n            0.08094,\n            0,\n            0.70834\n        ],\n        \"79\": [\n            0,\n            0.69444,\n            0.07555,\n            0,\n            0.73611\n        ],\n        \"80\": [\n            0,\n            0.69444,\n            0.08293,\n            0,\n            0.63889\n        ],\n        \"81\": [\n            0.125,\n            0.69444,\n            0.07555,\n            0,\n            0.73611\n        ],\n        \"82\": [\n            0,\n            0.69444,\n            0.08293,\n            0,\n            0.64584\n        ],\n        \"83\": [\n            0,\n            0.69444,\n            0.09205,\n            0,\n            0.55556\n        ],\n        \"84\": [\n            0,\n            0.69444,\n            0.13372,\n            0,\n            0.68056\n        ],\n        \"85\": [\n            0,\n            0.69444,\n            0.08094,\n            0,\n            0.6875\n        ],\n        \"86\": [\n            0,\n            0.69444,\n            0.1615,\n            0,\n            0.66667\n        ],\n        \"87\": [\n            0,\n            0.69444,\n            0.1615,\n            0,\n            0.94445\n        ],\n        \"88\": [\n            0,\n            0.69444,\n            0.13372,\n            0,\n            0.66667\n        ],\n        \"89\": [\n            0,\n            0.69444,\n            0.17261,\n            0,\n            0.66667\n        ],\n        \"90\": [\n            0,\n            0.69444,\n            0.11983,\n            0,\n            0.61111\n        ],\n        \"91\": [\n            0.25,\n            0.75,\n            0.15942,\n            0,\n            0.28889\n        ],\n        \"93\": [\n            0.25,\n            0.75,\n            0.08719,\n            0,\n            0.28889\n        ],\n        \"94\": [\n            0,\n            0.69444,\n            0.0799,\n            0,\n            0.5\n        ],\n        \"95\": [\n            0.35,\n            0.09444,\n            0.08616,\n            0,\n            0.5\n        ],\n        \"97\": [\n            0,\n            0.44444,\n            0.00981,\n            0,\n            0.48056\n        ],\n        \"98\": [\n            0,\n            0.69444,\n            0.03057,\n            0,\n            0.51667\n        ],\n        \"99\": [\n            0,\n            0.44444,\n            0.08336,\n            0,\n            0.44445\n        ],\n        \"100\": [\n            0,\n            0.69444,\n            0.09483,\n            0,\n            0.51667\n        ],\n        \"101\": [\n            0,\n            0.44444,\n            0.06778,\n            0,\n            0.44445\n        ],\n        \"102\": [\n            0,\n            0.69444,\n            0.21705,\n            0,\n            0.30556\n        ],\n        \"103\": [\n            0.19444,\n            0.44444,\n            0.10836,\n            0,\n            0.5\n        ],\n        \"104\": [\n            0,\n            0.69444,\n            0.01778,\n            0,\n            0.51667\n        ],\n        \"105\": [\n            0,\n            0.67937,\n            0.09718,\n            0,\n            0.23889\n        ],\n        \"106\": [\n            0.19444,\n            0.67937,\n            0.09162,\n            0,\n            0.26667\n        ],\n        \"107\": [\n            0,\n            0.69444,\n            0.08336,\n            0,\n            0.48889\n        ],\n        \"108\": [\n            0,\n            0.69444,\n            0.09483,\n            0,\n            0.23889\n        ],\n        \"109\": [\n            0,\n            0.44444,\n            0.01778,\n            0,\n            0.79445\n        ],\n        \"110\": [\n            0,\n            0.44444,\n            0.01778,\n            0,\n            0.51667\n        ],\n        \"111\": [\n            0,\n            0.44444,\n            0.06613,\n            0,\n            0.5\n        ],\n        \"112\": [\n            0.19444,\n            0.44444,\n            0.0389,\n            0,\n            0.51667\n        ],\n        \"113\": [\n            0.19444,\n            0.44444,\n            0.04169,\n            0,\n            0.51667\n        ],\n        \"114\": [\n            0,\n            0.44444,\n            0.10836,\n            0,\n            0.34167\n        ],\n        \"115\": [\n            0,\n            0.44444,\n            0.0778,\n            0,\n            0.38333\n        ],\n        \"116\": [\n            0,\n            0.57143,\n            0.07225,\n            0,\n            0.36111\n        ],\n        \"117\": [\n            0,\n            0.44444,\n            0.04169,\n            0,\n            0.51667\n        ],\n        \"118\": [\n            0,\n            0.44444,\n            0.10836,\n            0,\n            0.46111\n        ],\n        \"119\": [\n            0,\n            0.44444,\n            0.10836,\n            0,\n            0.68334\n        ],\n        \"120\": [\n            0,\n            0.44444,\n            0.09169,\n            0,\n            0.46111\n        ],\n        \"121\": [\n            0.19444,\n            0.44444,\n            0.10836,\n            0,\n            0.46111\n        ],\n        \"122\": [\n            0,\n            0.44444,\n            0.08752,\n            0,\n            0.43472\n        ],\n        \"126\": [\n            0.35,\n            0.32659,\n            0.08826,\n            0,\n            0.5\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"168\": [\n            0,\n            0.67937,\n            0.06385,\n            0,\n            0.5\n        ],\n        \"176\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.73752\n        ],\n        \"184\": [\n            0.17014,\n            0,\n            0,\n            0,\n            0.44445\n        ],\n        \"305\": [\n            0,\n            0.44444,\n            0.04169,\n            0,\n            0.23889\n        ],\n        \"567\": [\n            0.19444,\n            0.44444,\n            0.04169,\n            0,\n            0.26667\n        ],\n        \"710\": [\n            0,\n            0.69444,\n            0.0799,\n            0,\n            0.5\n        ],\n        \"711\": [\n            0,\n            0.63194,\n            0.08432,\n            0,\n            0.5\n        ],\n        \"713\": [\n            0,\n            0.60889,\n            0.08776,\n            0,\n            0.5\n        ],\n        \"714\": [\n            0,\n            0.69444,\n            0.09205,\n            0,\n            0.5\n        ],\n        \"715\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"728\": [\n            0,\n            0.69444,\n            0.09483,\n            0,\n            0.5\n        ],\n        \"729\": [\n            0,\n            0.67937,\n            0.07774,\n            0,\n            0.27778\n        ],\n        \"730\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.73752\n        ],\n        \"732\": [\n            0,\n            0.67659,\n            0.08826,\n            0,\n            0.5\n        ],\n        \"733\": [\n            0,\n            0.69444,\n            0.09205,\n            0,\n            0.5\n        ],\n        \"915\": [\n            0,\n            0.69444,\n            0.13372,\n            0,\n            0.54167\n        ],\n        \"916\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.83334\n        ],\n        \"920\": [\n            0,\n            0.69444,\n            0.07555,\n            0,\n            0.77778\n        ],\n        \"923\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.61111\n        ],\n        \"926\": [\n            0,\n            0.69444,\n            0.12816,\n            0,\n            0.66667\n        ],\n        \"928\": [\n            0,\n            0.69444,\n            0.08094,\n            0,\n            0.70834\n        ],\n        \"931\": [\n            0,\n            0.69444,\n            0.11983,\n            0,\n            0.72222\n        ],\n        \"933\": [\n            0,\n            0.69444,\n            0.09031,\n            0,\n            0.77778\n        ],\n        \"934\": [\n            0,\n            0.69444,\n            0.04603,\n            0,\n            0.72222\n        ],\n        \"936\": [\n            0,\n            0.69444,\n            0.09031,\n            0,\n            0.77778\n        ],\n        \"937\": [\n            0,\n            0.69444,\n            0.08293,\n            0,\n            0.72222\n        ],\n        \"8211\": [\n            0,\n            0.44444,\n            0.08616,\n            0,\n            0.5\n        ],\n        \"8212\": [\n            0,\n            0.44444,\n            0.08616,\n            0,\n            1.0\n        ],\n        \"8216\": [\n            0,\n            0.69444,\n            0.07816,\n            0,\n            0.27778\n        ],\n        \"8217\": [\n            0,\n            0.69444,\n            0.07816,\n            0,\n            0.27778\n        ],\n        \"8220\": [\n            0,\n            0.69444,\n            0.14205,\n            0,\n            0.5\n        ],\n        \"8221\": [\n            0,\n            0.69444,\n            0.00316,\n            0,\n            0.5\n        ]\n    },\n    \"SansSerif-Regular\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"33\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.31945\n        ],\n        \"34\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"35\": [\n            0.19444,\n            0.69444,\n            0,\n            0,\n            0.83334\n        ],\n        \"36\": [\n            0.05556,\n            0.75,\n            0,\n            0,\n            0.5\n        ],\n        \"37\": [\n            0.05556,\n            0.75,\n            0,\n            0,\n            0.83334\n        ],\n        \"38\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.75834\n        ],\n        \"39\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.27778\n        ],\n        \"40\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.38889\n        ],\n        \"41\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.38889\n        ],\n        \"42\": [\n            0,\n            0.75,\n            0,\n            0,\n            0.5\n        ],\n        \"43\": [\n            0.08333,\n            0.58333,\n            0,\n            0,\n            0.77778\n        ],\n        \"44\": [\n            0.125,\n            0.08333,\n            0,\n            0,\n            0.27778\n        ],\n        \"45\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.33333\n        ],\n        \"46\": [\n            0,\n            0.08333,\n            0,\n            0,\n            0.27778\n        ],\n        \"47\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.5\n        ],\n        \"48\": [\n            0,\n            0.65556,\n            0,\n            0,\n            0.5\n        ],\n        \"49\": [\n            0,\n            0.65556,\n            0,\n            0,\n            0.5\n        ],\n        \"50\": [\n            0,\n            0.65556,\n            0,\n            0,\n            0.5\n        ],\n        \"51\": [\n            0,\n            0.65556,\n            0,\n            0,\n            0.5\n        ],\n        \"52\": [\n            0,\n            0.65556,\n            0,\n            0,\n            0.5\n        ],\n        \"53\": [\n            0,\n            0.65556,\n            0,\n            0,\n            0.5\n        ],\n        \"54\": [\n            0,\n            0.65556,\n            0,\n            0,\n            0.5\n        ],\n        \"55\": [\n            0,\n            0.65556,\n            0,\n            0,\n            0.5\n        ],\n        \"56\": [\n            0,\n            0.65556,\n            0,\n            0,\n            0.5\n        ],\n        \"57\": [\n            0,\n            0.65556,\n            0,\n            0,\n            0.5\n        ],\n        \"58\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.27778\n        ],\n        \"59\": [\n            0.125,\n            0.44444,\n            0,\n            0,\n            0.27778\n        ],\n        \"61\": [\n            -0.13,\n            0.37,\n            0,\n            0,\n            0.77778\n        ],\n        \"63\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.47222\n        ],\n        \"64\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.66667\n        ],\n        \"65\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.66667\n        ],\n        \"66\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.66667\n        ],\n        \"67\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.63889\n        ],\n        \"68\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.72223\n        ],\n        \"69\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.59722\n        ],\n        \"70\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.56945\n        ],\n        \"71\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.66667\n        ],\n        \"72\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.70834\n        ],\n        \"73\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.27778\n        ],\n        \"74\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.47222\n        ],\n        \"75\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.69445\n        ],\n        \"76\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.54167\n        ],\n        \"77\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.875\n        ],\n        \"78\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.70834\n        ],\n        \"79\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.73611\n        ],\n        \"80\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.63889\n        ],\n        \"81\": [\n            0.125,\n            0.69444,\n            0,\n            0,\n            0.73611\n        ],\n        \"82\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.64584\n        ],\n        \"83\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.55556\n        ],\n        \"84\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.68056\n        ],\n        \"85\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.6875\n        ],\n        \"86\": [\n            0,\n            0.69444,\n            0.01389,\n            0,\n            0.66667\n        ],\n        \"87\": [\n            0,\n            0.69444,\n            0.01389,\n            0,\n            0.94445\n        ],\n        \"88\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.66667\n        ],\n        \"89\": [\n            0,\n            0.69444,\n            0.025,\n            0,\n            0.66667\n        ],\n        \"90\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.61111\n        ],\n        \"91\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.28889\n        ],\n        \"93\": [\n            0.25,\n            0.75,\n            0,\n            0,\n            0.28889\n        ],\n        \"94\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"95\": [\n            0.35,\n            0.09444,\n            0.02778,\n            0,\n            0.5\n        ],\n        \"97\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.48056\n        ],\n        \"98\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.51667\n        ],\n        \"99\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.44445\n        ],\n        \"100\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.51667\n        ],\n        \"101\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.44445\n        ],\n        \"102\": [\n            0,\n            0.69444,\n            0.06944,\n            0,\n            0.30556\n        ],\n        \"103\": [\n            0.19444,\n            0.44444,\n            0.01389,\n            0,\n            0.5\n        ],\n        \"104\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.51667\n        ],\n        \"105\": [\n            0,\n            0.67937,\n            0,\n            0,\n            0.23889\n        ],\n        \"106\": [\n            0.19444,\n            0.67937,\n            0,\n            0,\n            0.26667\n        ],\n        \"107\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.48889\n        ],\n        \"108\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.23889\n        ],\n        \"109\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.79445\n        ],\n        \"110\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.51667\n        ],\n        \"111\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.5\n        ],\n        \"112\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.51667\n        ],\n        \"113\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.51667\n        ],\n        \"114\": [\n            0,\n            0.44444,\n            0.01389,\n            0,\n            0.34167\n        ],\n        \"115\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.38333\n        ],\n        \"116\": [\n            0,\n            0.57143,\n            0,\n            0,\n            0.36111\n        ],\n        \"117\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.51667\n        ],\n        \"118\": [\n            0,\n            0.44444,\n            0.01389,\n            0,\n            0.46111\n        ],\n        \"119\": [\n            0,\n            0.44444,\n            0.01389,\n            0,\n            0.68334\n        ],\n        \"120\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.46111\n        ],\n        \"121\": [\n            0.19444,\n            0.44444,\n            0.01389,\n            0,\n            0.46111\n        ],\n        \"122\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.43472\n        ],\n        \"126\": [\n            0.35,\n            0.32659,\n            0,\n            0,\n            0.5\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"168\": [\n            0,\n            0.67937,\n            0,\n            0,\n            0.5\n        ],\n        \"176\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.66667\n        ],\n        \"184\": [\n            0.17014,\n            0,\n            0,\n            0,\n            0.44445\n        ],\n        \"305\": [\n            0,\n            0.44444,\n            0,\n            0,\n            0.23889\n        ],\n        \"567\": [\n            0.19444,\n            0.44444,\n            0,\n            0,\n            0.26667\n        ],\n        \"710\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"711\": [\n            0,\n            0.63194,\n            0,\n            0,\n            0.5\n        ],\n        \"713\": [\n            0,\n            0.60889,\n            0,\n            0,\n            0.5\n        ],\n        \"714\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"715\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"728\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"729\": [\n            0,\n            0.67937,\n            0,\n            0,\n            0.27778\n        ],\n        \"730\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.66667\n        ],\n        \"732\": [\n            0,\n            0.67659,\n            0,\n            0,\n            0.5\n        ],\n        \"733\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"915\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.54167\n        ],\n        \"916\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.83334\n        ],\n        \"920\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.77778\n        ],\n        \"923\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.61111\n        ],\n        \"926\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.66667\n        ],\n        \"928\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.70834\n        ],\n        \"931\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.72222\n        ],\n        \"933\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.77778\n        ],\n        \"934\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.72222\n        ],\n        \"936\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.77778\n        ],\n        \"937\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.72222\n        ],\n        \"8211\": [\n            0,\n            0.44444,\n            0.02778,\n            0,\n            0.5\n        ],\n        \"8212\": [\n            0,\n            0.44444,\n            0.02778,\n            0,\n            1.0\n        ],\n        \"8216\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.27778\n        ],\n        \"8217\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.27778\n        ],\n        \"8220\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ],\n        \"8221\": [\n            0,\n            0.69444,\n            0,\n            0,\n            0.5\n        ]\n    },\n    \"Script-Regular\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"65\": [\n            0,\n            0.7,\n            0.22925,\n            0,\n            0.80253\n        ],\n        \"66\": [\n            0,\n            0.7,\n            0.04087,\n            0,\n            0.90757\n        ],\n        \"67\": [\n            0,\n            0.7,\n            0.1689,\n            0,\n            0.66619\n        ],\n        \"68\": [\n            0,\n            0.7,\n            0.09371,\n            0,\n            0.77443\n        ],\n        \"69\": [\n            0,\n            0.7,\n            0.18583,\n            0,\n            0.56162\n        ],\n        \"70\": [\n            0,\n            0.7,\n            0.13634,\n            0,\n            0.89544\n        ],\n        \"71\": [\n            0,\n            0.7,\n            0.17322,\n            0,\n            0.60961\n        ],\n        \"72\": [\n            0,\n            0.7,\n            0.29694,\n            0,\n            0.96919\n        ],\n        \"73\": [\n            0,\n            0.7,\n            0.19189,\n            0,\n            0.80907\n        ],\n        \"74\": [\n            0.27778,\n            0.7,\n            0.19189,\n            0,\n            1.05159\n        ],\n        \"75\": [\n            0,\n            0.7,\n            0.31259,\n            0,\n            0.91364\n        ],\n        \"76\": [\n            0,\n            0.7,\n            0.19189,\n            0,\n            0.87373\n        ],\n        \"77\": [\n            0,\n            0.7,\n            0.15981,\n            0,\n            1.08031\n        ],\n        \"78\": [\n            0,\n            0.7,\n            0.3525,\n            0,\n            0.9015\n        ],\n        \"79\": [\n            0,\n            0.7,\n            0.08078,\n            0,\n            0.73787\n        ],\n        \"80\": [\n            0,\n            0.7,\n            0.08078,\n            0,\n            1.01262\n        ],\n        \"81\": [\n            0,\n            0.7,\n            0.03305,\n            0,\n            0.88282\n        ],\n        \"82\": [\n            0,\n            0.7,\n            0.06259,\n            0,\n            0.85\n        ],\n        \"83\": [\n            0,\n            0.7,\n            0.19189,\n            0,\n            0.86767\n        ],\n        \"84\": [\n            0,\n            0.7,\n            0.29087,\n            0,\n            0.74697\n        ],\n        \"85\": [\n            0,\n            0.7,\n            0.25815,\n            0,\n            0.79996\n        ],\n        \"86\": [\n            0,\n            0.7,\n            0.27523,\n            0,\n            0.62204\n        ],\n        \"87\": [\n            0,\n            0.7,\n            0.27523,\n            0,\n            0.80532\n        ],\n        \"88\": [\n            0,\n            0.7,\n            0.26006,\n            0,\n            0.94445\n        ],\n        \"89\": [\n            0,\n            0.7,\n            0.2939,\n            0,\n            0.70961\n        ],\n        \"90\": [\n            0,\n            0.7,\n            0.24037,\n            0,\n            0.8212\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ]\n    },\n    \"Size1-Regular\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"40\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            0.45834\n        ],\n        \"41\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            0.45834\n        ],\n        \"47\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            0.57778\n        ],\n        \"91\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            0.41667\n        ],\n        \"92\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            0.57778\n        ],\n        \"93\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            0.41667\n        ],\n        \"123\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            0.58334\n        ],\n        \"125\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            0.58334\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"710\": [\n            0,\n            0.72222,\n            0,\n            0,\n            0.55556\n        ],\n        \"732\": [\n            0,\n            0.72222,\n            0,\n            0,\n            0.55556\n        ],\n        \"770\": [\n            0,\n            0.72222,\n            0,\n            0,\n            0.55556\n        ],\n        \"771\": [\n            0,\n            0.72222,\n            0,\n            0,\n            0.55556\n        ],\n        \"8214\": [\n            -0.00099,\n            0.601,\n            0,\n            0,\n            0.77778\n        ],\n        \"8593\": [\n            1e-05,\n            0.6,\n            0,\n            0,\n            0.66667\n        ],\n        \"8595\": [\n            1e-05,\n            0.6,\n            0,\n            0,\n            0.66667\n        ],\n        \"8657\": [\n            1e-05,\n            0.6,\n            0,\n            0,\n            0.77778\n        ],\n        \"8659\": [\n            1e-05,\n            0.6,\n            0,\n            0,\n            0.77778\n        ],\n        \"8719\": [\n            0.25001,\n            0.75,\n            0,\n            0,\n            0.94445\n        ],\n        \"8720\": [\n            0.25001,\n            0.75,\n            0,\n            0,\n            0.94445\n        ],\n        \"8721\": [\n            0.25001,\n            0.75,\n            0,\n            0,\n            1.05556\n        ],\n        \"8730\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            1.0\n        ],\n        \"8739\": [\n            -0.00599,\n            0.606,\n            0,\n            0,\n            0.33333\n        ],\n        \"8741\": [\n            -0.00599,\n            0.606,\n            0,\n            0,\n            0.55556\n        ],\n        \"8747\": [\n            0.30612,\n            0.805,\n            0.19445,\n            0,\n            0.47222\n        ],\n        \"8748\": [\n            0.306,\n            0.805,\n            0.19445,\n            0,\n            0.47222\n        ],\n        \"8749\": [\n            0.306,\n            0.805,\n            0.19445,\n            0,\n            0.47222\n        ],\n        \"8750\": [\n            0.30612,\n            0.805,\n            0.19445,\n            0,\n            0.47222\n        ],\n        \"8896\": [\n            0.25001,\n            0.75,\n            0,\n            0,\n            0.83334\n        ],\n        \"8897\": [\n            0.25001,\n            0.75,\n            0,\n            0,\n            0.83334\n        ],\n        \"8898\": [\n            0.25001,\n            0.75,\n            0,\n            0,\n            0.83334\n        ],\n        \"8899\": [\n            0.25001,\n            0.75,\n            0,\n            0,\n            0.83334\n        ],\n        \"8968\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            0.47222\n        ],\n        \"8969\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            0.47222\n        ],\n        \"8970\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            0.47222\n        ],\n        \"8971\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            0.47222\n        ],\n        \"9168\": [\n            -0.00099,\n            0.601,\n            0,\n            0,\n            0.66667\n        ],\n        \"10216\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            0.47222\n        ],\n        \"10217\": [\n            0.35001,\n            0.85,\n            0,\n            0,\n            0.47222\n        ],\n        \"10752\": [\n            0.25001,\n            0.75,\n            0,\n            0,\n            1.11111\n        ],\n        \"10753\": [\n            0.25001,\n            0.75,\n            0,\n            0,\n            1.11111\n        ],\n        \"10754\": [\n            0.25001,\n            0.75,\n            0,\n            0,\n            1.11111\n        ],\n        \"10756\": [\n            0.25001,\n            0.75,\n            0,\n            0,\n            0.83334\n        ],\n        \"10758\": [\n            0.25001,\n            0.75,\n            0,\n            0,\n            0.83334\n        ]\n    },\n    \"Size2-Regular\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"40\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.59722\n        ],\n        \"41\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.59722\n        ],\n        \"47\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.81111\n        ],\n        \"91\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.47222\n        ],\n        \"92\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.81111\n        ],\n        \"93\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.47222\n        ],\n        \"123\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.66667\n        ],\n        \"125\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.66667\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"710\": [\n            0,\n            0.75,\n            0,\n            0,\n            1.0\n        ],\n        \"732\": [\n            0,\n            0.75,\n            0,\n            0,\n            1.0\n        ],\n        \"770\": [\n            0,\n            0.75,\n            0,\n            0,\n            1.0\n        ],\n        \"771\": [\n            0,\n            0.75,\n            0,\n            0,\n            1.0\n        ],\n        \"8719\": [\n            0.55001,\n            1.05,\n            0,\n            0,\n            1.27778\n        ],\n        \"8720\": [\n            0.55001,\n            1.05,\n            0,\n            0,\n            1.27778\n        ],\n        \"8721\": [\n            0.55001,\n            1.05,\n            0,\n            0,\n            1.44445\n        ],\n        \"8730\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            1.0\n        ],\n        \"8747\": [\n            0.86225,\n            1.36,\n            0.44445,\n            0,\n            0.55556\n        ],\n        \"8748\": [\n            0.862,\n            1.36,\n            0.44445,\n            0,\n            0.55556\n        ],\n        \"8749\": [\n            0.862,\n            1.36,\n            0.44445,\n            0,\n            0.55556\n        ],\n        \"8750\": [\n            0.86225,\n            1.36,\n            0.44445,\n            0,\n            0.55556\n        ],\n        \"8896\": [\n            0.55001,\n            1.05,\n            0,\n            0,\n            1.11111\n        ],\n        \"8897\": [\n            0.55001,\n            1.05,\n            0,\n            0,\n            1.11111\n        ],\n        \"8898\": [\n            0.55001,\n            1.05,\n            0,\n            0,\n            1.11111\n        ],\n        \"8899\": [\n            0.55001,\n            1.05,\n            0,\n            0,\n            1.11111\n        ],\n        \"8968\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.52778\n        ],\n        \"8969\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.52778\n        ],\n        \"8970\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.52778\n        ],\n        \"8971\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.52778\n        ],\n        \"10216\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.61111\n        ],\n        \"10217\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.61111\n        ],\n        \"10752\": [\n            0.55001,\n            1.05,\n            0,\n            0,\n            1.51112\n        ],\n        \"10753\": [\n            0.55001,\n            1.05,\n            0,\n            0,\n            1.51112\n        ],\n        \"10754\": [\n            0.55001,\n            1.05,\n            0,\n            0,\n            1.51112\n        ],\n        \"10756\": [\n            0.55001,\n            1.05,\n            0,\n            0,\n            1.11111\n        ],\n        \"10758\": [\n            0.55001,\n            1.05,\n            0,\n            0,\n            1.11111\n        ]\n    },\n    \"Size3-Regular\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"40\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            0.73611\n        ],\n        \"41\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            0.73611\n        ],\n        \"47\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            1.04445\n        ],\n        \"91\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            0.52778\n        ],\n        \"92\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            1.04445\n        ],\n        \"93\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            0.52778\n        ],\n        \"123\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            0.75\n        ],\n        \"125\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            0.75\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"710\": [\n            0,\n            0.75,\n            0,\n            0,\n            1.44445\n        ],\n        \"732\": [\n            0,\n            0.75,\n            0,\n            0,\n            1.44445\n        ],\n        \"770\": [\n            0,\n            0.75,\n            0,\n            0,\n            1.44445\n        ],\n        \"771\": [\n            0,\n            0.75,\n            0,\n            0,\n            1.44445\n        ],\n        \"8730\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            1.0\n        ],\n        \"8968\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            0.58334\n        ],\n        \"8969\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            0.58334\n        ],\n        \"8970\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            0.58334\n        ],\n        \"8971\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            0.58334\n        ],\n        \"10216\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            0.75\n        ],\n        \"10217\": [\n            0.95003,\n            1.45,\n            0,\n            0,\n            0.75\n        ]\n    },\n    \"Size4-Regular\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"40\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            0.79167\n        ],\n        \"41\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            0.79167\n        ],\n        \"47\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            1.27778\n        ],\n        \"91\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            0.58334\n        ],\n        \"92\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            1.27778\n        ],\n        \"93\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            0.58334\n        ],\n        \"123\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            0.80556\n        ],\n        \"125\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            0.80556\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.25\n        ],\n        \"710\": [\n            0,\n            0.825,\n            0,\n            0,\n            1.8889\n        ],\n        \"732\": [\n            0,\n            0.825,\n            0,\n            0,\n            1.8889\n        ],\n        \"770\": [\n            0,\n            0.825,\n            0,\n            0,\n            1.8889\n        ],\n        \"771\": [\n            0,\n            0.825,\n            0,\n            0,\n            1.8889\n        ],\n        \"8730\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            1.0\n        ],\n        \"8968\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            0.63889\n        ],\n        \"8969\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            0.63889\n        ],\n        \"8970\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            0.63889\n        ],\n        \"8971\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            0.63889\n        ],\n        \"9115\": [\n            0.64502,\n            1.155,\n            0,\n            0,\n            0.875\n        ],\n        \"9116\": [\n            1e-05,\n            0.6,\n            0,\n            0,\n            0.875\n        ],\n        \"9117\": [\n            0.64502,\n            1.155,\n            0,\n            0,\n            0.875\n        ],\n        \"9118\": [\n            0.64502,\n            1.155,\n            0,\n            0,\n            0.875\n        ],\n        \"9119\": [\n            1e-05,\n            0.6,\n            0,\n            0,\n            0.875\n        ],\n        \"9120\": [\n            0.64502,\n            1.155,\n            0,\n            0,\n            0.875\n        ],\n        \"9121\": [\n            0.64502,\n            1.155,\n            0,\n            0,\n            0.66667\n        ],\n        \"9122\": [\n            -0.00099,\n            0.601,\n            0,\n            0,\n            0.66667\n        ],\n        \"9123\": [\n            0.64502,\n            1.155,\n            0,\n            0,\n            0.66667\n        ],\n        \"9124\": [\n            0.64502,\n            1.155,\n            0,\n            0,\n            0.66667\n        ],\n        \"9125\": [\n            -0.00099,\n            0.601,\n            0,\n            0,\n            0.66667\n        ],\n        \"9126\": [\n            0.64502,\n            1.155,\n            0,\n            0,\n            0.66667\n        ],\n        \"9127\": [\n            1e-05,\n            0.9,\n            0,\n            0,\n            0.88889\n        ],\n        \"9128\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.88889\n        ],\n        \"9129\": [\n            0.90001,\n            0,\n            0,\n            0,\n            0.88889\n        ],\n        \"9130\": [\n            0,\n            0.3,\n            0,\n            0,\n            0.88889\n        ],\n        \"9131\": [\n            1e-05,\n            0.9,\n            0,\n            0,\n            0.88889\n        ],\n        \"9132\": [\n            0.65002,\n            1.15,\n            0,\n            0,\n            0.88889\n        ],\n        \"9133\": [\n            0.90001,\n            0,\n            0,\n            0,\n            0.88889\n        ],\n        \"9143\": [\n            0.88502,\n            0.915,\n            0,\n            0,\n            1.05556\n        ],\n        \"10216\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            0.80556\n        ],\n        \"10217\": [\n            1.25003,\n            1.75,\n            0,\n            0,\n            0.80556\n        ],\n        \"57344\": [\n            -0.00499,\n            0.605,\n            0,\n            0,\n            1.05556\n        ],\n        \"57345\": [\n            -0.00499,\n            0.605,\n            0,\n            0,\n            1.05556\n        ],\n        \"57680\": [\n            0,\n            0.12,\n            0,\n            0,\n            0.45\n        ],\n        \"57681\": [\n            0,\n            0.12,\n            0,\n            0,\n            0.45\n        ],\n        \"57682\": [\n            0,\n            0.12,\n            0,\n            0,\n            0.45\n        ],\n        \"57683\": [\n            0,\n            0.12,\n            0,\n            0,\n            0.45\n        ]\n    },\n    \"Typewriter-Regular\": {\n        \"32\": [\n            0,\n            0,\n            0,\n            0,\n            0.525\n        ],\n        \"33\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"34\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"35\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"36\": [\n            0.08333,\n            0.69444,\n            0,\n            0,\n            0.525\n        ],\n        \"37\": [\n            0.08333,\n            0.69444,\n            0,\n            0,\n            0.525\n        ],\n        \"38\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"39\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"40\": [\n            0.08333,\n            0.69444,\n            0,\n            0,\n            0.525\n        ],\n        \"41\": [\n            0.08333,\n            0.69444,\n            0,\n            0,\n            0.525\n        ],\n        \"42\": [\n            0,\n            0.52083,\n            0,\n            0,\n            0.525\n        ],\n        \"43\": [\n            -0.08056,\n            0.53055,\n            0,\n            0,\n            0.525\n        ],\n        \"44\": [\n            0.13889,\n            0.125,\n            0,\n            0,\n            0.525\n        ],\n        \"45\": [\n            -0.08056,\n            0.53055,\n            0,\n            0,\n            0.525\n        ],\n        \"46\": [\n            0,\n            0.125,\n            0,\n            0,\n            0.525\n        ],\n        \"47\": [\n            0.08333,\n            0.69444,\n            0,\n            0,\n            0.525\n        ],\n        \"48\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"49\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"50\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"51\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"52\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"53\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"54\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"55\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"56\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"57\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"58\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"59\": [\n            0.13889,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"60\": [\n            -0.05556,\n            0.55556,\n            0,\n            0,\n            0.525\n        ],\n        \"61\": [\n            -0.19549,\n            0.41562,\n            0,\n            0,\n            0.525\n        ],\n        \"62\": [\n            -0.05556,\n            0.55556,\n            0,\n            0,\n            0.525\n        ],\n        \"63\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"64\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"65\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"66\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"67\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"68\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"69\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"70\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"71\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"72\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"73\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"74\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"75\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"76\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"77\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"78\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"79\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"80\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"81\": [\n            0.13889,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"82\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"83\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"84\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"85\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"86\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"87\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"88\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"89\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"90\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"91\": [\n            0.08333,\n            0.69444,\n            0,\n            0,\n            0.525\n        ],\n        \"92\": [\n            0.08333,\n            0.69444,\n            0,\n            0,\n            0.525\n        ],\n        \"93\": [\n            0.08333,\n            0.69444,\n            0,\n            0,\n            0.525\n        ],\n        \"94\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"95\": [\n            0.09514,\n            0,\n            0,\n            0,\n            0.525\n        ],\n        \"96\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"97\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"98\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"99\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"100\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"101\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"102\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"103\": [\n            0.22222,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"104\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"105\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"106\": [\n            0.22222,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"107\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"108\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"109\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"110\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"111\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"112\": [\n            0.22222,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"113\": [\n            0.22222,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"114\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"115\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"116\": [\n            0,\n            0.55358,\n            0,\n            0,\n            0.525\n        ],\n        \"117\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"118\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"119\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"120\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"121\": [\n            0.22222,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"122\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"123\": [\n            0.08333,\n            0.69444,\n            0,\n            0,\n            0.525\n        ],\n        \"124\": [\n            0.08333,\n            0.69444,\n            0,\n            0,\n            0.525\n        ],\n        \"125\": [\n            0.08333,\n            0.69444,\n            0,\n            0,\n            0.525\n        ],\n        \"126\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"127\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"160\": [\n            0,\n            0,\n            0,\n            0,\n            0.525\n        ],\n        \"176\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"184\": [\n            0.19445,\n            0,\n            0,\n            0,\n            0.525\n        ],\n        \"305\": [\n            0,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"567\": [\n            0.22222,\n            0.43056,\n            0,\n            0,\n            0.525\n        ],\n        \"711\": [\n            0,\n            0.56597,\n            0,\n            0,\n            0.525\n        ],\n        \"713\": [\n            0,\n            0.56555,\n            0,\n            0,\n            0.525\n        ],\n        \"714\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"715\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"728\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"730\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"770\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"771\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"776\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"915\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"916\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"920\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"923\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"926\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"928\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"931\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"933\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"934\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"936\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"937\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"8216\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"8217\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"8242\": [\n            0,\n            0.61111,\n            0,\n            0,\n            0.525\n        ],\n        \"9251\": [\n            0.11111,\n            0.21944,\n            0,\n            0,\n            0.525\n        ]\n    }\n};\n/**\n * This file contains metrics regarding fonts and individual symbols. The sigma\n * and xi variables, as well as the metricMap map contain data extracted from\n * TeX, TeX font metrics, and the TTF files. These data are then exposed via the\n * `metrics` variable and the getCharacterMetrics function.\n */ // In TeX, there are actually three sets of dimensions, one for each of\n// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:\n// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt).  These are\n// provided in the arrays below, in that order.\n//\n// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respectively.\n// This was determined by running the following script:\n//\n//     latex -interaction=nonstopmode \\\n//     '\\documentclass{article}\\usepackage{amsmath}\\begin{document}' \\\n//     '$a$ \\expandafter\\show\\the\\textfont2' \\\n//     '\\expandafter\\show\\the\\scriptfont2' \\\n//     '\\expandafter\\show\\the\\scriptscriptfont2' \\\n//     '\\stop'\n//\n// The metrics themselves were retrieved using the following commands:\n//\n//     tftopl cmsy10\n//     tftopl cmsy7\n//     tftopl cmsy5\n//\n// The output of each of these commands is quite lengthy.  The only part we\n// care about is the FONTDIMEN section. Each value is measured in EMs.\nvar sigmasAndXis = {\n    slant: [\n        0.250,\n        0.250,\n        0.250\n    ],\n    // sigma1\n    space: [\n        0.000,\n        0.000,\n        0.000\n    ],\n    // sigma2\n    stretch: [\n        0.000,\n        0.000,\n        0.000\n    ],\n    // sigma3\n    shrink: [\n        0.000,\n        0.000,\n        0.000\n    ],\n    // sigma4\n    xHeight: [\n        0.431,\n        0.431,\n        0.431\n    ],\n    // sigma5\n    quad: [\n        1.000,\n        1.171,\n        1.472\n    ],\n    // sigma6\n    extraSpace: [\n        0.000,\n        0.000,\n        0.000\n    ],\n    // sigma7\n    num1: [\n        0.677,\n        0.732,\n        0.925\n    ],\n    // sigma8\n    num2: [\n        0.394,\n        0.384,\n        0.387\n    ],\n    // sigma9\n    num3: [\n        0.444,\n        0.471,\n        0.504\n    ],\n    // sigma10\n    denom1: [\n        0.686,\n        0.752,\n        1.025\n    ],\n    // sigma11\n    denom2: [\n        0.345,\n        0.344,\n        0.532\n    ],\n    // sigma12\n    sup1: [\n        0.413,\n        0.503,\n        0.504\n    ],\n    // sigma13\n    sup2: [\n        0.363,\n        0.431,\n        0.404\n    ],\n    // sigma14\n    sup3: [\n        0.289,\n        0.286,\n        0.294\n    ],\n    // sigma15\n    sub1: [\n        0.150,\n        0.143,\n        0.200\n    ],\n    // sigma16\n    sub2: [\n        0.247,\n        0.286,\n        0.400\n    ],\n    // sigma17\n    supDrop: [\n        0.386,\n        0.353,\n        0.494\n    ],\n    // sigma18\n    subDrop: [\n        0.050,\n        0.071,\n        0.100\n    ],\n    // sigma19\n    delim1: [\n        2.390,\n        1.700,\n        1.980\n    ],\n    // sigma20\n    delim2: [\n        1.010,\n        1.157,\n        1.420\n    ],\n    // sigma21\n    axisHeight: [\n        0.250,\n        0.250,\n        0.250\n    ],\n    // sigma22\n    // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;\n    // they correspond to the font parameters of the extension fonts (family 3).\n    // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to\n    // match cmex7, we'd use cmex7.tfm values for script and scriptscript\n    // values.\n    defaultRuleThickness: [\n        0.04,\n        0.049,\n        0.049\n    ],\n    // xi8; cmex7: 0.049\n    bigOpSpacing1: [\n        0.111,\n        0.111,\n        0.111\n    ],\n    // xi9\n    bigOpSpacing2: [\n        0.166,\n        0.166,\n        0.166\n    ],\n    // xi10\n    bigOpSpacing3: [\n        0.2,\n        0.2,\n        0.2\n    ],\n    // xi11\n    bigOpSpacing4: [\n        0.6,\n        0.611,\n        0.611\n    ],\n    // xi12; cmex7: 0.611\n    bigOpSpacing5: [\n        0.1,\n        0.143,\n        0.143\n    ],\n    // xi13; cmex7: 0.143\n    // The \\sqrt rule width is taken from the height of the surd character.\n    // Since we use the same font at all sizes, this thickness doesn't scale.\n    sqrtRuleThickness: [\n        0.04,\n        0.04,\n        0.04\n    ],\n    // This value determines how large a pt is, for metrics which are defined\n    // in terms of pts.\n    // This value is also used in katex.less; if you change it make sure the\n    // values match.\n    ptPerEm: [\n        10.0,\n        10.0,\n        10.0\n    ],\n    // The space between adjacent `|` columns in an array definition. From\n    // `\\showthe\\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.\n    doubleRuleSep: [\n        0.2,\n        0.2,\n        0.2\n    ],\n    // The width of separator lines in {array} environments. From\n    // `\\showthe\\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.\n    arrayRuleWidth: [\n        0.04,\n        0.04,\n        0.04\n    ],\n    // Two values from LaTeX source2e:\n    fboxsep: [\n        0.3,\n        0.3,\n        0.3\n    ],\n    //        3 pt / ptPerEm\n    fboxrule: [\n        0.04,\n        0.04,\n        0.04\n    ] // 0.4 pt / ptPerEm\n}; // This map contains a mapping from font name and character code to character\n// should have Latin-1 and Cyrillic characters, but may not depending on the\n// operating system.  The metrics do not account for extra height from the\n// accents.  In the case of Cyrillic characters which have both ascenders and\n// descenders we prefer approximations with ascenders, primarily to prevent\n// the fraction bar or root line from intersecting the glyph.\n// TODO(kevinb) allow union of multiple glyph metrics for better accuracy.\nvar extraCharacterMap = {\n    // Latin-1\n    \"\\xc5\": \"A\",\n    \"\\xd0\": \"D\",\n    \"\\xde\": \"o\",\n    \"\\xe5\": \"a\",\n    \"\\xf0\": \"d\",\n    \"\\xfe\": \"o\",\n    // Cyrillic\n    \"А\": \"A\",\n    \"Б\": \"B\",\n    \"В\": \"B\",\n    \"Г\": \"F\",\n    \"Д\": \"A\",\n    \"Е\": \"E\",\n    \"Ж\": \"K\",\n    \"З\": \"3\",\n    \"И\": \"N\",\n    \"Й\": \"N\",\n    \"К\": \"K\",\n    \"Л\": \"N\",\n    \"М\": \"M\",\n    \"Н\": \"H\",\n    \"О\": \"O\",\n    \"П\": \"N\",\n    \"Р\": \"P\",\n    \"С\": \"C\",\n    \"Т\": \"T\",\n    \"У\": \"y\",\n    \"Ф\": \"O\",\n    \"Х\": \"X\",\n    \"Ц\": \"U\",\n    \"Ч\": \"h\",\n    \"Ш\": \"W\",\n    \"Щ\": \"W\",\n    \"Ъ\": \"B\",\n    \"Ы\": \"X\",\n    \"Ь\": \"B\",\n    \"Э\": \"3\",\n    \"Ю\": \"X\",\n    \"Я\": \"R\",\n    \"а\": \"a\",\n    \"б\": \"b\",\n    \"в\": \"a\",\n    \"г\": \"r\",\n    \"д\": \"y\",\n    \"е\": \"e\",\n    \"ж\": \"m\",\n    \"з\": \"e\",\n    \"и\": \"n\",\n    \"й\": \"n\",\n    \"к\": \"n\",\n    \"л\": \"n\",\n    \"м\": \"m\",\n    \"н\": \"n\",\n    \"о\": \"o\",\n    \"п\": \"n\",\n    \"р\": \"p\",\n    \"с\": \"c\",\n    \"т\": \"o\",\n    \"у\": \"y\",\n    \"ф\": \"b\",\n    \"х\": \"x\",\n    \"ц\": \"n\",\n    \"ч\": \"n\",\n    \"ш\": \"w\",\n    \"щ\": \"w\",\n    \"ъ\": \"a\",\n    \"ы\": \"m\",\n    \"ь\": \"a\",\n    \"э\": \"e\",\n    \"ю\": \"m\",\n    \"я\": \"r\"\n};\n/**\n * This function adds new font metrics to default metricMap\n * It can also override existing metrics\n */ function setFontMetrics(fontName, metrics) {\n    fontMetricsData[fontName] = metrics;\n}\n/**\n * This function is a convenience function for looking up information in the\n * metricMap table. It takes a character as a string, and a font.\n *\n * Note: the `width` property may be undefined if fontMetricsData.js wasn't\n * built using `Make extended_metrics`.\n */ function getCharacterMetrics(character, font, mode) {\n    if (!fontMetricsData[font]) {\n        throw new Error(\"Font metrics not found for font: \" + font + \".\");\n    }\n    var ch = character.charCodeAt(0);\n    var metrics = fontMetricsData[font][ch];\n    if (!metrics && character[0] in extraCharacterMap) {\n        ch = extraCharacterMap[character[0]].charCodeAt(0);\n        metrics = fontMetricsData[font][ch];\n    }\n    if (!metrics && mode === \"text\") {\n        // We don't typically have font metrics for Asian scripts.\n        // But since we support them in text mode, we need to return\n        // some sort of metrics.\n        // So if the character is in a script we support but we\n        // don't have metrics for it, just use the metrics for\n        // the Latin capital letter M. This is close enough because\n        // we (currently) only care about the height of the glyph\n        // not its width.\n        if (supportedCodepoint(ch)) {\n            metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M'\n        }\n    }\n    if (metrics) {\n        return {\n            depth: metrics[0],\n            height: metrics[1],\n            italic: metrics[2],\n            skew: metrics[3],\n            width: metrics[4]\n        };\n    }\n}\nvar fontMetricsBySizeIndex = {};\n/**\n * Get the font metrics for a given size.\n */ function getGlobalMetrics(size) {\n    var sizeIndex;\n    if (size >= 5) {\n        sizeIndex = 0;\n    } else if (size >= 3) {\n        sizeIndex = 1;\n    } else {\n        sizeIndex = 2;\n    }\n    if (!fontMetricsBySizeIndex[sizeIndex]) {\n        var metrics = fontMetricsBySizeIndex[sizeIndex] = {\n            cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18\n        };\n        for(var key in sigmasAndXis){\n            if (sigmasAndXis.hasOwnProperty(key)) {\n                metrics[key] = sigmasAndXis[key][sizeIndex];\n            }\n        }\n    }\n    return fontMetricsBySizeIndex[sizeIndex];\n}\n/**\n * This file contains information about the options that the Parser carries\n * around with it while parsing. Data is held in an `Options` object, and when\n * recursing, a new `Options` object can be created with the `.with*` and\n * `.reset` functions.\n */ var sizeStyleMap = [\n    // The size mappings are taken from TeX with \\normalsize=10pt.\n    [\n        1,\n        1,\n        1\n    ],\n    [\n        2,\n        1,\n        1\n    ],\n    [\n        3,\n        1,\n        1\n    ],\n    [\n        4,\n        2,\n        1\n    ],\n    [\n        5,\n        2,\n        1\n    ],\n    [\n        6,\n        3,\n        1\n    ],\n    [\n        7,\n        4,\n        2\n    ],\n    [\n        8,\n        6,\n        3\n    ],\n    [\n        9,\n        7,\n        6\n    ],\n    [\n        10,\n        8,\n        7\n    ],\n    [\n        11,\n        10,\n        9\n    ] // size11: [24.88, 20.74, 17.28] \\HUGE\n];\nvar sizeMultipliers = [\n    // you change size indexes, change that function.\n    0.5,\n    0.6,\n    0.7,\n    0.8,\n    0.9,\n    1.0,\n    1.2,\n    1.44,\n    1.728,\n    2.074,\n    2.488\n];\nvar sizeAtStyle = function sizeAtStyle(size, style) {\n    return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];\n}; // In these types, \"\" (empty string) means \"no change\".\n/**\n * This is the main options class. It contains the current style, size, color,\n * and font.\n *\n * Options objects should not be modified. To create a new Options with\n * different properties, call a `.having*` method.\n */ class Options {\n    // A font family applies to a group of fonts (i.e. SansSerif), while a font\n    // represents a specific font (i.e. SansSerif Bold).\n    // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm\n    /**\n   * The base size index.\n   */ constructor(data){\n        this.style = void 0;\n        this.color = void 0;\n        this.size = void 0;\n        this.textSize = void 0;\n        this.phantom = void 0;\n        this.font = void 0;\n        this.fontFamily = void 0;\n        this.fontWeight = void 0;\n        this.fontShape = void 0;\n        this.sizeMultiplier = void 0;\n        this.maxSize = void 0;\n        this.minRuleThickness = void 0;\n        this._fontMetrics = void 0;\n        this.style = data.style;\n        this.color = data.color;\n        this.size = data.size || Options.BASESIZE;\n        this.textSize = data.textSize || this.size;\n        this.phantom = !!data.phantom;\n        this.font = data.font || \"\";\n        this.fontFamily = data.fontFamily || \"\";\n        this.fontWeight = data.fontWeight || \"\";\n        this.fontShape = data.fontShape || \"\";\n        this.sizeMultiplier = sizeMultipliers[this.size - 1];\n        this.maxSize = data.maxSize;\n        this.minRuleThickness = data.minRuleThickness;\n        this._fontMetrics = undefined;\n    }\n    /**\n   * Returns a new options object with the same properties as \"this\".  Properties\n   * from \"extension\" will be copied to the new options object.\n   */ extend(extension) {\n        var data = {\n            style: this.style,\n            size: this.size,\n            textSize: this.textSize,\n            color: this.color,\n            phantom: this.phantom,\n            font: this.font,\n            fontFamily: this.fontFamily,\n            fontWeight: this.fontWeight,\n            fontShape: this.fontShape,\n            maxSize: this.maxSize,\n            minRuleThickness: this.minRuleThickness\n        };\n        for(var key in extension){\n            if (extension.hasOwnProperty(key)) {\n                data[key] = extension[key];\n            }\n        }\n        return new Options(data);\n    }\n    /**\n   * Return an options object with the given style. If `this.style === style`,\n   * returns `this`.\n   */ havingStyle(style) {\n        if (this.style === style) {\n            return this;\n        } else {\n            return this.extend({\n                style: style,\n                size: sizeAtStyle(this.textSize, style)\n            });\n        }\n    }\n    /**\n   * Return an options object with a cramped version of the current style. If\n   * the current style is cramped, returns `this`.\n   */ havingCrampedStyle() {\n        return this.havingStyle(this.style.cramp());\n    }\n    /**\n   * Return an options object with the given size and in at least `\\textstyle`.\n   * Returns `this` if appropriate.\n   */ havingSize(size) {\n        if (this.size === size && this.textSize === size) {\n            return this;\n        } else {\n            return this.extend({\n                style: this.style.text(),\n                size: size,\n                textSize: size,\n                sizeMultiplier: sizeMultipliers[size - 1]\n            });\n        }\n    }\n    /**\n   * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,\n   * changes to at least `\\textstyle`.\n   */ havingBaseStyle(style) {\n        style = style || this.style.text();\n        var wantSize = sizeAtStyle(Options.BASESIZE, style);\n        if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) {\n            return this;\n        } else {\n            return this.extend({\n                style: style,\n                size: wantSize\n            });\n        }\n    }\n    /**\n   * Remove the effect of sizing changes such as \\Huge.\n   * Keep the effect of the current style, such as \\scriptstyle.\n   */ havingBaseSizing() {\n        var size;\n        switch(this.style.id){\n            case 4:\n            case 5:\n                size = 3; // normalsize in scriptstyle\n                break;\n            case 6:\n            case 7:\n                size = 1; // normalsize in scriptscriptstyle\n                break;\n            default:\n                size = 6;\n        }\n        return this.extend({\n            style: this.style.text(),\n            size: size\n        });\n    }\n    /**\n   * Create a new options object with the given color.\n   */ withColor(color) {\n        return this.extend({\n            color: color\n        });\n    }\n    /**\n   * Create a new options object with \"phantom\" set to true.\n   */ withPhantom() {\n        return this.extend({\n            phantom: true\n        });\n    }\n    /**\n   * Creates a new options object with the given math font or old text font.\n   * @type {[type]}\n   */ withFont(font) {\n        return this.extend({\n            font\n        });\n    }\n    /**\n   * Create a new options objects with the given fontFamily.\n   */ withTextFontFamily(fontFamily) {\n        return this.extend({\n            fontFamily,\n            font: \"\"\n        });\n    }\n    /**\n   * Creates a new options object with the given font weight\n   */ withTextFontWeight(fontWeight) {\n        return this.extend({\n            fontWeight,\n            font: \"\"\n        });\n    }\n    /**\n   * Creates a new options object with the given font weight\n   */ withTextFontShape(fontShape) {\n        return this.extend({\n            fontShape,\n            font: \"\"\n        });\n    }\n    /**\n   * Return the CSS sizing classes required to switch from enclosing options\n   * `oldOptions` to `this`. Returns an array of classes.\n   */ sizingClasses(oldOptions) {\n        if (oldOptions.size !== this.size) {\n            return [\n                \"sizing\",\n                \"reset-size\" + oldOptions.size,\n                \"size\" + this.size\n            ];\n        } else {\n            return [];\n        }\n    }\n    /**\n   * Return the CSS sizing classes required to switch to the base size. Like\n   * `this.havingSize(BASESIZE).sizingClasses(this)`.\n   */ baseSizingClasses() {\n        if (this.size !== Options.BASESIZE) {\n            return [\n                \"sizing\",\n                \"reset-size\" + this.size,\n                \"size\" + Options.BASESIZE\n            ];\n        } else {\n            return [];\n        }\n    }\n    /**\n   * Return the font metrics for this size.\n   */ fontMetrics() {\n        if (!this._fontMetrics) {\n            this._fontMetrics = getGlobalMetrics(this.size);\n        }\n        return this._fontMetrics;\n    }\n    /**\n   * Gets the CSS color of the current options object\n   */ getColor() {\n        if (this.phantom) {\n            return \"transparent\";\n        } else {\n            return this.color;\n        }\n    }\n}\nOptions.BASESIZE = 6;\n/**\n * This file does conversion between units.  In particular, it provides\n * calculateSize to convert other units into ems.\n */ // Thus, multiplying a length by this number converts the length from units\n// into pts.  Dividing the result by ptPerEm gives the number of ems\n// *assuming* a font size of ptPerEm (normal size, normal style).\nvar ptPerUnit = {\n    // https://en.wikibooks.org/wiki/LaTeX/Lengths and\n    // https://tex.stackexchange.com/a/8263\n    \"pt\": 1,\n    // TeX point\n    \"mm\": 7227 / 2540,\n    // millimeter\n    \"cm\": 7227 / 254,\n    // centimeter\n    \"in\": 72.27,\n    // inch\n    \"bp\": 803 / 800,\n    // big (PostScript) points\n    \"pc\": 12,\n    // pica\n    \"dd\": 1238 / 1157,\n    // didot\n    \"cc\": 14856 / 1157,\n    // cicero (12 didot)\n    \"nd\": 685 / 642,\n    // new didot\n    \"nc\": 1370 / 107,\n    // new cicero (12 new didot)\n    \"sp\": 1 / 65536,\n    // scaled point (TeX's internal smallest unit)\n    // https://tex.stackexchange.com/a/41371\n    \"px\": 803 / 800 // \\pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX\n}; // Dictionary of relative units, for fast validity testing.\nvar relativeUnit = {\n    \"ex\": true,\n    \"em\": true,\n    \"mu\": true\n};\n/**\n * Determine whether the specified unit (either a string defining the unit\n * or a \"size\" parse node containing a unit field) is valid.\n */ var validUnit = function validUnit(unit) {\n    if (typeof unit !== \"string\") {\n        unit = unit.unit;\n    }\n    return unit in ptPerUnit || unit in relativeUnit || unit === \"ex\";\n};\n/*\n * Convert a \"size\" parse node (with numeric \"number\" and string \"unit\" fields,\n * as parsed by functions.js argType \"size\") into a CSS em value for the\n * current style/scale.  `options` gives the current options.\n */ var calculateSize = function calculateSize(sizeValue, options) {\n    var scale;\n    if (sizeValue.unit in ptPerUnit) {\n        // Absolute units\n        scale = ptPerUnit[sizeValue.unit] // Convert unit to pt\n         / options.fontMetrics().ptPerEm // Convert pt to CSS em\n         / options.sizeMultiplier; // Unscale to make absolute units\n    } else if (sizeValue.unit === \"mu\") {\n        // `mu` units scale with scriptstyle/scriptscriptstyle.\n        scale = options.fontMetrics().cssEmPerMu;\n    } else {\n        // Other relative units always refer to the *textstyle* font\n        // in the current size.\n        var unitOptions;\n        if (options.style.isTight()) {\n            // isTight() means current style is script/scriptscript.\n            unitOptions = options.havingStyle(options.style.text());\n        } else {\n            unitOptions = options;\n        } // TODO: In TeX these units are relative to the quad of the current\n        // *text* font, e.g. cmr10. KaTeX instead uses values from the\n        // comparably-sized *Computer Modern symbol* font. At 10pt, these\n        // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;\n        // cmr5=1.361133, cmsy5=1.472241. Consider $\\scriptsize a\\kern1emb$.\n        // TeX \\showlists shows a kern of 1.13889 * fontsize;\n        // KaTeX shows a kern of 1.171 * fontsize.\n        if (sizeValue.unit === \"ex\") {\n            scale = unitOptions.fontMetrics().xHeight;\n        } else if (sizeValue.unit === \"em\") {\n            scale = unitOptions.fontMetrics().quad;\n        } else {\n            throw new ParseError(\"Invalid unit: '\" + sizeValue.unit + \"'\");\n        }\n        if (unitOptions !== options) {\n            scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;\n        }\n    }\n    return Math.min(sizeValue.number * scale, options.maxSize);\n};\n/**\n * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See\n * https://github.com/KaTeX/KaTeX/pull/2460.\n */ var makeEm = function makeEm(n) {\n    return +n.toFixed(4) + \"em\";\n};\n/**\n * These objects store the data about the DOM nodes we create, as well as some\n * extra data. They can then be transformed into real DOM nodes with the\n * `toNode` function or HTML markup using `toMarkup`. They are useful for both\n * storing extra properties on the nodes, as well as providing a way to easily\n * work with the DOM.\n *\n * Similar functions for working with MathML nodes exist in mathMLTree.js.\n *\n * TODO: refactor `span` and `anchor` into common superclass when\n * target environments support class inheritance\n */ /**\n * Create an HTML className based on a list of classes. In addition to joining\n * with spaces, we also remove empty classes.\n */ var createClass = function createClass(classes) {\n    return classes.filter((cls)=>cls).join(\" \");\n};\nvar initNode = function initNode(classes, options, style) {\n    this.classes = classes || [];\n    this.attributes = {};\n    this.height = 0;\n    this.depth = 0;\n    this.maxFontSize = 0;\n    this.style = style || {};\n    if (options) {\n        if (options.style.isTight()) {\n            this.classes.push(\"mtight\");\n        }\n        var color = options.getColor();\n        if (color) {\n            this.style.color = color;\n        }\n    }\n};\n/**\n * Convert into an HTML node\n */ var toNode = function toNode(tagName) {\n    var node = document.createElement(tagName); // Apply the class\n    node.className = createClass(this.classes); // Apply inline styles\n    for(var style in this.style){\n        if (this.style.hasOwnProperty(style)) {\n            // $FlowFixMe Flow doesn't seem to understand span.style's type.\n            node.style[style] = this.style[style];\n        }\n    } // Apply attributes\n    for(var attr in this.attributes){\n        if (this.attributes.hasOwnProperty(attr)) {\n            node.setAttribute(attr, this.attributes[attr]);\n        }\n    } // Append the children, also as HTML nodes\n    for(var i = 0; i < this.children.length; i++){\n        node.appendChild(this.children[i].toNode());\n    }\n    return node;\n};\n/**\n * Convert into an HTML markup string\n */ var toMarkup = function toMarkup(tagName) {\n    var markup = \"<\" + tagName; // Add the class\n    if (this.classes.length) {\n        markup += ' class=\"' + utils.escape(createClass(this.classes)) + '\"';\n    }\n    var styles = \"\"; // Add the styles, after hyphenation\n    for(var style in this.style){\n        if (this.style.hasOwnProperty(style)) {\n            styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n        }\n    }\n    if (styles) {\n        markup += ' style=\"' + utils.escape(styles) + '\"';\n    } // Add the attributes\n    for(var attr in this.attributes){\n        if (this.attributes.hasOwnProperty(attr)) {\n            markup += \" \" + attr + '=\"' + utils.escape(this.attributes[attr]) + '\"';\n        }\n    }\n    markup += \">\"; // Add the markup of the children, also as markup\n    for(var i = 0; i < this.children.length; i++){\n        markup += this.children[i].toMarkup();\n    }\n    markup += \"</\" + tagName + \">\";\n    return markup;\n}; // Making the type below exact with all optional fields doesn't work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n// This type does not include all CSS properties. Additional properties should\n// be added as needed.\n/**\n * This node represents a span node, with a className, a list of children, and\n * an inline style. It also contains information about its height, depth, and\n * maxFontSize.\n *\n * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan\n * otherwise. This typesafety is important when HTML builders access a span's\n * children.\n */ class Span {\n    constructor(classes, children, options, style){\n        this.children = void 0;\n        this.attributes = void 0;\n        this.classes = void 0;\n        this.height = void 0;\n        this.depth = void 0;\n        this.width = void 0;\n        this.maxFontSize = void 0;\n        this.style = void 0;\n        initNode.call(this, classes, options, style);\n        this.children = children || [];\n    }\n    /**\n   * Sets an arbitrary attribute on the span. Warning: use this wisely. Not\n   * all browsers support attributes the same, and having too many custom\n   * attributes is probably bad.\n   */ setAttribute(attribute, value) {\n        this.attributes[attribute] = value;\n    }\n    hasClass(className) {\n        return utils.contains(this.classes, className);\n    }\n    toNode() {\n        return toNode.call(this, \"span\");\n    }\n    toMarkup() {\n        return toMarkup.call(this, \"span\");\n    }\n}\n/**\n * This node represents an anchor (<a>) element with a hyperlink.  See `span`\n * for further details.\n */ class Anchor {\n    constructor(href, classes, children, options){\n        this.children = void 0;\n        this.attributes = void 0;\n        this.classes = void 0;\n        this.height = void 0;\n        this.depth = void 0;\n        this.maxFontSize = void 0;\n        this.style = void 0;\n        initNode.call(this, classes, options);\n        this.children = children || [];\n        this.setAttribute(\"href\", href);\n    }\n    setAttribute(attribute, value) {\n        this.attributes[attribute] = value;\n    }\n    hasClass(className) {\n        return utils.contains(this.classes, className);\n    }\n    toNode() {\n        return toNode.call(this, \"a\");\n    }\n    toMarkup() {\n        return toMarkup.call(this, \"a\");\n    }\n}\n/**\n * This node represents an image embed (<img>) element.\n */ class Img {\n    constructor(src, alt, style){\n        this.src = void 0;\n        this.alt = void 0;\n        this.classes = void 0;\n        this.height = void 0;\n        this.depth = void 0;\n        this.maxFontSize = void 0;\n        this.style = void 0;\n        this.alt = alt;\n        this.src = src;\n        this.classes = [\n            \"mord\"\n        ];\n        this.style = style;\n    }\n    hasClass(className) {\n        return utils.contains(this.classes, className);\n    }\n    toNode() {\n        var node = document.createElement(\"img\");\n        node.src = this.src;\n        node.alt = this.alt;\n        node.className = \"mord\"; // Apply inline styles\n        for(var style in this.style){\n            if (this.style.hasOwnProperty(style)) {\n                // $FlowFixMe\n                node.style[style] = this.style[style];\n            }\n        }\n        return node;\n    }\n    toMarkup() {\n        var markup = \"<img  src='\" + this.src + \" 'alt='\" + this.alt + \"' \"; // Add the styles, after hyphenation\n        var styles = \"\";\n        for(var style in this.style){\n            if (this.style.hasOwnProperty(style)) {\n                styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n            }\n        }\n        if (styles) {\n            markup += ' style=\"' + utils.escape(styles) + '\"';\n        }\n        markup += \"'/>\";\n        return markup;\n    }\n}\nvar iCombinations = {\n    \"\\xee\": \"ı̂\",\n    \"\\xef\": \"ı̈\",\n    \"\\xed\": \"ı́\",\n    // 'ī': '\\u0131\\u0304', // enable when we add Extended Latin\n    \"\\xec\": \"ı̀\"\n};\n/**\n * A symbol node contains information about a single symbol. It either renders\n * to a single text node, or a span with a single text node in it, depending on\n * whether it has CSS classes, styles, or needs italic correction.\n */ class SymbolNode {\n    constructor(text, height, depth, italic, skew, width, classes, style){\n        this.text = void 0;\n        this.height = void 0;\n        this.depth = void 0;\n        this.italic = void 0;\n        this.skew = void 0;\n        this.width = void 0;\n        this.maxFontSize = void 0;\n        this.classes = void 0;\n        this.style = void 0;\n        this.text = text;\n        this.height = height || 0;\n        this.depth = depth || 0;\n        this.italic = italic || 0;\n        this.skew = skew || 0;\n        this.width = width || 0;\n        this.classes = classes || [];\n        this.style = style || {};\n        this.maxFontSize = 0; // Mark text from non-Latin scripts with specific classes so that we\n        // can specify which fonts to use.  This allows us to render these\n        // characters with a serif font in situations where the browser would\n        // either default to a sans serif or render a placeholder character.\n        // We use CSS class names like cjk_fallback, hangul_fallback and\n        // brahmic_fallback. See ./unicodeScripts.js for the set of possible\n        // script names\n        var script = scriptFromCodepoint(this.text.charCodeAt(0));\n        if (script) {\n            this.classes.push(script + \"_fallback\");\n        }\n        if (/[îïíì]/.test(this.text)) {\n            // add ī when we add Extended Latin\n            this.text = iCombinations[this.text];\n        }\n    }\n    hasClass(className) {\n        return utils.contains(this.classes, className);\n    }\n    /**\n   * Creates a text node or span from a symbol node. Note that a span is only\n   * created if it is needed.\n   */ toNode() {\n        var node = document.createTextNode(this.text);\n        var span = null;\n        if (this.italic > 0) {\n            span = document.createElement(\"span\");\n            span.style.marginRight = makeEm(this.italic);\n        }\n        if (this.classes.length > 0) {\n            span = span || document.createElement(\"span\");\n            span.className = createClass(this.classes);\n        }\n        for(var style in this.style){\n            if (this.style.hasOwnProperty(style)) {\n                span = span || document.createElement(\"span\"); // $FlowFixMe Flow doesn't seem to understand span.style's type.\n                span.style[style] = this.style[style];\n            }\n        }\n        if (span) {\n            span.appendChild(node);\n            return span;\n        } else {\n            return node;\n        }\n    }\n    /**\n   * Creates markup for a symbol node.\n   */ toMarkup() {\n        // TODO(alpert): More duplication than I'd like from\n        // span.prototype.toMarkup and symbolNode.prototype.toNode...\n        var needsSpan = false;\n        var markup = \"<span\";\n        if (this.classes.length) {\n            needsSpan = true;\n            markup += ' class=\"';\n            markup += utils.escape(createClass(this.classes));\n            markup += '\"';\n        }\n        var styles = \"\";\n        if (this.italic > 0) {\n            styles += \"margin-right:\" + this.italic + \"em;\";\n        }\n        for(var style in this.style){\n            if (this.style.hasOwnProperty(style)) {\n                styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n            }\n        }\n        if (styles) {\n            needsSpan = true;\n            markup += ' style=\"' + utils.escape(styles) + '\"';\n        }\n        var escaped = utils.escape(this.text);\n        if (needsSpan) {\n            markup += \">\";\n            markup += escaped;\n            markup += \"</span>\";\n            return markup;\n        } else {\n            return escaped;\n        }\n    }\n}\n/**\n * SVG nodes are used to render stretchy wide elements.\n */ class SvgNode {\n    constructor(children, attributes){\n        this.children = void 0;\n        this.attributes = void 0;\n        this.children = children || [];\n        this.attributes = attributes || {};\n    }\n    toNode() {\n        var svgNS = \"http://www.w3.org/2000/svg\";\n        var node = document.createElementNS(svgNS, \"svg\"); // Apply attributes\n        for(var attr in this.attributes){\n            if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n                node.setAttribute(attr, this.attributes[attr]);\n            }\n        }\n        for(var i = 0; i < this.children.length; i++){\n            node.appendChild(this.children[i].toNode());\n        }\n        return node;\n    }\n    toMarkup() {\n        var markup = '<svg xmlns=\"http://www.w3.org/2000/svg\"'; // Apply attributes\n        for(var attr in this.attributes){\n            if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n                markup += \" \" + attr + \"='\" + this.attributes[attr] + \"'\";\n            }\n        }\n        markup += \">\";\n        for(var i = 0; i < this.children.length; i++){\n            markup += this.children[i].toMarkup();\n        }\n        markup += \"</svg>\";\n        return markup;\n    }\n}\nclass PathNode {\n    constructor(pathName, alternate){\n        this.pathName = void 0;\n        this.alternate = void 0;\n        this.pathName = pathName;\n        this.alternate = alternate; // Used only for \\sqrt, \\phase, & tall delims\n    }\n    toNode() {\n        var svgNS = \"http://www.w3.org/2000/svg\";\n        var node = document.createElementNS(svgNS, \"path\");\n        if (this.alternate) {\n            node.setAttribute(\"d\", this.alternate);\n        } else {\n            node.setAttribute(\"d\", path[this.pathName]);\n        }\n        return node;\n    }\n    toMarkup() {\n        if (this.alternate) {\n            return \"<path d='\" + this.alternate + \"'/>\";\n        } else {\n            return \"<path d='\" + path[this.pathName] + \"'/>\";\n        }\n    }\n}\nclass LineNode {\n    constructor(attributes){\n        this.attributes = void 0;\n        this.attributes = attributes || {};\n    }\n    toNode() {\n        var svgNS = \"http://www.w3.org/2000/svg\";\n        var node = document.createElementNS(svgNS, \"line\"); // Apply attributes\n        for(var attr in this.attributes){\n            if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n                node.setAttribute(attr, this.attributes[attr]);\n            }\n        }\n        return node;\n    }\n    toMarkup() {\n        var markup = \"<line\";\n        for(var attr in this.attributes){\n            if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n                markup += \" \" + attr + \"='\" + this.attributes[attr] + \"'\";\n            }\n        }\n        markup += \"/>\";\n        return markup;\n    }\n}\nfunction assertSymbolDomNode(group) {\n    if (group instanceof SymbolNode) {\n        return group;\n    } else {\n        throw new Error(\"Expected symbolNode but got \" + String(group) + \".\");\n    }\n}\nfunction assertSpan(group) {\n    if (group instanceof Span) {\n        return group;\n    } else {\n        throw new Error(\"Expected span<HtmlDomNode> but got \" + String(group) + \".\");\n    }\n}\n/**\n * This file holds a list of all no-argument functions and single-character\n * symbols (like 'a' or ';').\n *\n * For each of the symbols, there are three properties they can have:\n * - font (required): the font to be used for this symbol. Either \"main\" (the\n     normal font), or \"ams\" (the ams fonts).\n * - group (required): the ParseNode group type the symbol should have (i.e.\n     \"textord\", \"mathord\", etc).\n     See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types\n * - replace: the character that this symbol or function should be\n *   replaced with (i.e. \"\\phi\" has a replace value of \"\\u03d5\", the phi\n *   character in the main font).\n *\n * The outermost map in the table indicates what mode the symbols should be\n * accepted in (e.g. \"math\" or \"text\").\n */ // Some of these have a \"-token\" suffix since these are also used as `ParseNode`\n// types for raw text tokens, and we want to avoid conflicts with higher-level\n// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by\n// looking up the `symbols` map.\nvar ATOMS = {\n    \"bin\": 1,\n    \"close\": 1,\n    \"inner\": 1,\n    \"open\": 1,\n    \"punct\": 1,\n    \"rel\": 1\n};\nvar NON_ATOMS = {\n    \"accent-token\": 1,\n    \"mathord\": 1,\n    \"op-token\": 1,\n    \"spacing\": 1,\n    \"textord\": 1\n};\nvar symbols = {\n    \"math\": {},\n    \"text\": {}\n};\n/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */ function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {\n    symbols[mode][name] = {\n        font,\n        group,\n        replace\n    };\n    if (acceptUnicodeChar && replace) {\n        symbols[mode][replace] = symbols[mode][name];\n    }\n} // Some abbreviations for commonly used strings.\n// This helps minify the code, and also spotting typos using jshint.\n// modes:\nvar math = \"math\";\nvar text = \"text\"; // fonts:\nvar main = \"main\";\nvar ams = \"ams\"; // groups:\nvar accent = \"accent-token\";\nvar bin = \"bin\";\nvar close = \"close\";\nvar inner = \"inner\";\nvar mathord = \"mathord\";\nvar op = \"op-token\";\nvar open = \"open\";\nvar punct = \"punct\";\nvar rel = \"rel\";\nvar spacing = \"spacing\";\nvar textord = \"textord\"; // Now comes the symbol table\n// Relation Symbols\ndefineSymbol(math, main, rel, \"≡\", \"\\\\equiv\", true);\ndefineSymbol(math, main, rel, \"≺\", \"\\\\prec\", true);\ndefineSymbol(math, main, rel, \"≻\", \"\\\\succ\", true);\ndefineSymbol(math, main, rel, \"∼\", \"\\\\sim\", true);\ndefineSymbol(math, main, rel, \"⊥\", \"\\\\perp\");\ndefineSymbol(math, main, rel, \"⪯\", \"\\\\preceq\", true);\ndefineSymbol(math, main, rel, \"⪰\", \"\\\\succeq\", true);\ndefineSymbol(math, main, rel, \"≃\", \"\\\\simeq\", true);\ndefineSymbol(math, main, rel, \"∣\", \"\\\\mid\", true);\ndefineSymbol(math, main, rel, \"≪\", \"\\\\ll\", true);\ndefineSymbol(math, main, rel, \"≫\", \"\\\\gg\", true);\ndefineSymbol(math, main, rel, \"≍\", \"\\\\asymp\", true);\ndefineSymbol(math, main, rel, \"∥\", \"\\\\parallel\");\ndefineSymbol(math, main, rel, \"⋈\", \"\\\\bowtie\", true);\ndefineSymbol(math, main, rel, \"⌣\", \"\\\\smile\", true);\ndefineSymbol(math, main, rel, \"⊑\", \"\\\\sqsubseteq\", true);\ndefineSymbol(math, main, rel, \"⊒\", \"\\\\sqsupseteq\", true);\ndefineSymbol(math, main, rel, \"≐\", \"\\\\doteq\", true);\ndefineSymbol(math, main, rel, \"⌢\", \"\\\\frown\", true);\ndefineSymbol(math, main, rel, \"∋\", \"\\\\ni\", true);\ndefineSymbol(math, main, rel, \"∝\", \"\\\\propto\", true);\ndefineSymbol(math, main, rel, \"⊢\", \"\\\\vdash\", true);\ndefineSymbol(math, main, rel, \"⊣\", \"\\\\dashv\", true);\ndefineSymbol(math, main, rel, \"∋\", \"\\\\owns\"); // Punctuation\ndefineSymbol(math, main, punct, \".\", \"\\\\ldotp\");\ndefineSymbol(math, main, punct, \"⋅\", \"\\\\cdotp\"); // Misc Symbols\ndefineSymbol(math, main, textord, \"#\", \"\\\\#\");\ndefineSymbol(text, main, textord, \"#\", \"\\\\#\");\ndefineSymbol(math, main, textord, \"&\", \"\\\\&\");\ndefineSymbol(text, main, textord, \"&\", \"\\\\&\");\ndefineSymbol(math, main, textord, \"ℵ\", \"\\\\aleph\", true);\ndefineSymbol(math, main, textord, \"∀\", \"\\\\forall\", true);\ndefineSymbol(math, main, textord, \"ℏ\", \"\\\\hbar\", true);\ndefineSymbol(math, main, textord, \"∃\", \"\\\\exists\", true);\ndefineSymbol(math, main, textord, \"∇\", \"\\\\nabla\", true);\ndefineSymbol(math, main, textord, \"♭\", \"\\\\flat\", true);\ndefineSymbol(math, main, textord, \"ℓ\", \"\\\\ell\", true);\ndefineSymbol(math, main, textord, \"♮\", \"\\\\natural\", true);\ndefineSymbol(math, main, textord, \"♣\", \"\\\\clubsuit\", true);\ndefineSymbol(math, main, textord, \"℘\", \"\\\\wp\", true);\ndefineSymbol(math, main, textord, \"♯\", \"\\\\sharp\", true);\ndefineSymbol(math, main, textord, \"♢\", \"\\\\diamondsuit\", true);\ndefineSymbol(math, main, textord, \"ℜ\", \"\\\\Re\", true);\ndefineSymbol(math, main, textord, \"♡\", \"\\\\heartsuit\", true);\ndefineSymbol(math, main, textord, \"ℑ\", \"\\\\Im\", true);\ndefineSymbol(math, main, textord, \"♠\", \"\\\\spadesuit\", true);\ndefineSymbol(math, main, textord, \"\\xa7\", \"\\\\S\", true);\ndefineSymbol(text, main, textord, \"\\xa7\", \"\\\\S\");\ndefineSymbol(math, main, textord, \"\\xb6\", \"\\\\P\", true);\ndefineSymbol(text, main, textord, \"\\xb6\", \"\\\\P\"); // Math and Text\ndefineSymbol(math, main, textord, \"†\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"†\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"†\", \"\\\\textdagger\");\ndefineSymbol(math, main, textord, \"‡\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"‡\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"‡\", \"\\\\textdaggerdbl\"); // Large Delimiters\ndefineSymbol(math, main, close, \"⎱\", \"\\\\rmoustache\", true);\ndefineSymbol(math, main, open, \"⎰\", \"\\\\lmoustache\", true);\ndefineSymbol(math, main, close, \"⟯\", \"\\\\rgroup\", true);\ndefineSymbol(math, main, open, \"⟮\", \"\\\\lgroup\", true); // Binary Operators\ndefineSymbol(math, main, bin, \"∓\", \"\\\\mp\", true);\ndefineSymbol(math, main, bin, \"⊖\", \"\\\\ominus\", true);\ndefineSymbol(math, main, bin, \"⊎\", \"\\\\uplus\", true);\ndefineSymbol(math, main, bin, \"⊓\", \"\\\\sqcap\", true);\ndefineSymbol(math, main, bin, \"∗\", \"\\\\ast\");\ndefineSymbol(math, main, bin, \"⊔\", \"\\\\sqcup\", true);\ndefineSymbol(math, main, bin, \"◯\", \"\\\\bigcirc\", true);\ndefineSymbol(math, main, bin, \"∙\", \"\\\\bullet\", true);\ndefineSymbol(math, main, bin, \"‡\", \"\\\\ddagger\");\ndefineSymbol(math, main, bin, \"≀\", \"\\\\wr\", true);\ndefineSymbol(math, main, bin, \"⨿\", \"\\\\amalg\");\ndefineSymbol(math, main, bin, \"&\", \"\\\\And\"); // from amsmath\n// Arrow Symbols\ndefineSymbol(math, main, rel, \"⟵\", \"\\\\longleftarrow\", true);\ndefineSymbol(math, main, rel, \"⇐\", \"\\\\Leftarrow\", true);\ndefineSymbol(math, main, rel, \"⟸\", \"\\\\Longleftarrow\", true);\ndefineSymbol(math, main, rel, \"⟶\", \"\\\\longrightarrow\", true);\ndefineSymbol(math, main, rel, \"⇒\", \"\\\\Rightarrow\", true);\ndefineSymbol(math, main, rel, \"⟹\", \"\\\\Longrightarrow\", true);\ndefineSymbol(math, main, rel, \"↔\", \"\\\\leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"⟷\", \"\\\\longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"⇔\", \"\\\\Leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"⟺\", \"\\\\Longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"↦\", \"\\\\mapsto\", true);\ndefineSymbol(math, main, rel, \"⟼\", \"\\\\longmapsto\", true);\ndefineSymbol(math, main, rel, \"↗\", \"\\\\nearrow\", true);\ndefineSymbol(math, main, rel, \"↩\", \"\\\\hookleftarrow\", true);\ndefineSymbol(math, main, rel, \"↪\", \"\\\\hookrightarrow\", true);\ndefineSymbol(math, main, rel, \"↘\", \"\\\\searrow\", true);\ndefineSymbol(math, main, rel, \"↼\", \"\\\\leftharpoonup\", true);\ndefineSymbol(math, main, rel, \"⇀\", \"\\\\rightharpoonup\", true);\ndefineSymbol(math, main, rel, \"↙\", \"\\\\swarrow\", true);\ndefineSymbol(math, main, rel, \"↽\", \"\\\\leftharpoondown\", true);\ndefineSymbol(math, main, rel, \"⇁\", \"\\\\rightharpoondown\", true);\ndefineSymbol(math, main, rel, \"↖\", \"\\\\nwarrow\", true);\ndefineSymbol(math, main, rel, \"⇌\", \"\\\\rightleftharpoons\", true); // AMS Negated Binary Relations\ndefineSymbol(math, ams, rel, \"≮\", \"\\\\nless\", true); // Symbol names preceeded by \"@\" each have a corresponding macro.\ndefineSymbol(math, ams, rel, \"\", \"\\\\@nleqslant\");\ndefineSymbol(math, ams, rel, \"\", \"\\\\@nleqq\");\ndefineSymbol(math, ams, rel, \"⪇\", \"\\\\lneq\", true);\ndefineSymbol(math, ams, rel, \"≨\", \"\\\\lneqq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@lvertneqq\");\ndefineSymbol(math, ams, rel, \"⋦\", \"\\\\lnsim\", true);\ndefineSymbol(math, ams, rel, \"⪉\", \"\\\\lnapprox\", true);\ndefineSymbol(math, ams, rel, \"⊀\", \"\\\\nprec\", true); // unicode-math maps \\u22e0 to \\npreccurlyeq. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"⋠\", \"\\\\npreceq\", true);\ndefineSymbol(math, ams, rel, \"⋨\", \"\\\\precnsim\", true);\ndefineSymbol(math, ams, rel, \"⪹\", \"\\\\precnapprox\", true);\ndefineSymbol(math, ams, rel, \"≁\", \"\\\\nsim\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@nshortmid\");\ndefineSymbol(math, ams, rel, \"∤\", \"\\\\nmid\", true);\ndefineSymbol(math, ams, rel, \"⊬\", \"\\\\nvdash\", true);\ndefineSymbol(math, ams, rel, \"⊭\", \"\\\\nvDash\", true);\ndefineSymbol(math, ams, rel, \"⋪\", \"\\\\ntriangleleft\");\ndefineSymbol(math, ams, rel, \"⋬\", \"\\\\ntrianglelefteq\", true);\ndefineSymbol(math, ams, rel, \"⊊\", \"\\\\subsetneq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@varsubsetneq\");\ndefineSymbol(math, ams, rel, \"⫋\", \"\\\\subsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@varsubsetneqq\");\ndefineSymbol(math, ams, rel, \"≯\", \"\\\\ngtr\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@ngeqslant\");\ndefineSymbol(math, ams, rel, \"\", \"\\\\@ngeqq\");\ndefineSymbol(math, ams, rel, \"⪈\", \"\\\\gneq\", true);\ndefineSymbol(math, ams, rel, \"≩\", \"\\\\gneqq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@gvertneqq\");\ndefineSymbol(math, ams, rel, \"⋧\", \"\\\\gnsim\", true);\ndefineSymbol(math, ams, rel, \"⪊\", \"\\\\gnapprox\", true);\ndefineSymbol(math, ams, rel, \"⊁\", \"\\\\nsucc\", true); // unicode-math maps \\u22e1 to \\nsucccurlyeq. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"⋡\", \"\\\\nsucceq\", true);\ndefineSymbol(math, ams, rel, \"⋩\", \"\\\\succnsim\", true);\ndefineSymbol(math, ams, rel, \"⪺\", \"\\\\succnapprox\", true); // unicode-math maps \\u2246 to \\simneqq. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"≆\", \"\\\\ncong\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@nshortparallel\");\ndefineSymbol(math, ams, rel, \"∦\", \"\\\\nparallel\", true);\ndefineSymbol(math, ams, rel, \"⊯\", \"\\\\nVDash\", true);\ndefineSymbol(math, ams, rel, \"⋫\", \"\\\\ntriangleright\");\ndefineSymbol(math, ams, rel, \"⋭\", \"\\\\ntrianglerighteq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@nsupseteqq\");\ndefineSymbol(math, ams, rel, \"⊋\", \"\\\\supsetneq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@varsupsetneq\");\ndefineSymbol(math, ams, rel, \"⫌\", \"\\\\supsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@varsupsetneqq\");\ndefineSymbol(math, ams, rel, \"⊮\", \"\\\\nVdash\", true);\ndefineSymbol(math, ams, rel, \"⪵\", \"\\\\precneqq\", true);\ndefineSymbol(math, ams, rel, \"⪶\", \"\\\\succneqq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@nsubseteqq\");\ndefineSymbol(math, ams, bin, \"⊴\", \"\\\\unlhd\");\ndefineSymbol(math, ams, bin, \"⊵\", \"\\\\unrhd\"); // AMS Negated Arrows\ndefineSymbol(math, ams, rel, \"↚\", \"\\\\nleftarrow\", true);\ndefineSymbol(math, ams, rel, \"↛\", \"\\\\nrightarrow\", true);\ndefineSymbol(math, ams, rel, \"⇍\", \"\\\\nLeftarrow\", true);\ndefineSymbol(math, ams, rel, \"⇏\", \"\\\\nRightarrow\", true);\ndefineSymbol(math, ams, rel, \"↮\", \"\\\\nleftrightarrow\", true);\ndefineSymbol(math, ams, rel, \"⇎\", \"\\\\nLeftrightarrow\", true); // AMS Misc\ndefineSymbol(math, ams, rel, \"△\", \"\\\\vartriangle\");\ndefineSymbol(math, ams, textord, \"ℏ\", \"\\\\hslash\");\ndefineSymbol(math, ams, textord, \"▽\", \"\\\\triangledown\");\ndefineSymbol(math, ams, textord, \"◊\", \"\\\\lozenge\");\ndefineSymbol(math, ams, textord, \"Ⓢ\", \"\\\\circledS\");\ndefineSymbol(math, ams, textord, \"\\xae\", \"\\\\circledR\");\ndefineSymbol(text, ams, textord, \"\\xae\", \"\\\\circledR\");\ndefineSymbol(math, ams, textord, \"∡\", \"\\\\measuredangle\", true);\ndefineSymbol(math, ams, textord, \"∄\", \"\\\\nexists\");\ndefineSymbol(math, ams, textord, \"℧\", \"\\\\mho\");\ndefineSymbol(math, ams, textord, \"Ⅎ\", \"\\\\Finv\", true);\ndefineSymbol(math, ams, textord, \"⅁\", \"\\\\Game\", true);\ndefineSymbol(math, ams, textord, \"‵\", \"\\\\backprime\");\ndefineSymbol(math, ams, textord, \"▲\", \"\\\\blacktriangle\");\ndefineSymbol(math, ams, textord, \"▼\", \"\\\\blacktriangledown\");\ndefineSymbol(math, ams, textord, \"■\", \"\\\\blacksquare\");\ndefineSymbol(math, ams, textord, \"⧫\", \"\\\\blacklozenge\");\ndefineSymbol(math, ams, textord, \"★\", \"\\\\bigstar\");\ndefineSymbol(math, ams, textord, \"∢\", \"\\\\sphericalangle\", true);\ndefineSymbol(math, ams, textord, \"∁\", \"\\\\complement\", true); // unicode-math maps U+F0 to \\matheth. We map to AMS function \\eth\ndefineSymbol(math, ams, textord, \"\\xf0\", \"\\\\eth\", true);\ndefineSymbol(text, main, textord, \"\\xf0\", \"\\xf0\");\ndefineSymbol(math, ams, textord, \"╱\", \"\\\\diagup\");\ndefineSymbol(math, ams, textord, \"╲\", \"\\\\diagdown\");\ndefineSymbol(math, ams, textord, \"□\", \"\\\\square\");\ndefineSymbol(math, ams, textord, \"□\", \"\\\\Box\");\ndefineSymbol(math, ams, textord, \"◊\", \"\\\\Diamond\"); // unicode-math maps U+A5 to \\mathyen. We map to AMS function \\yen\ndefineSymbol(math, ams, textord, \"\\xa5\", \"\\\\yen\", true);\ndefineSymbol(text, ams, textord, \"\\xa5\", \"\\\\yen\", true);\ndefineSymbol(math, ams, textord, \"✓\", \"\\\\checkmark\", true);\ndefineSymbol(text, ams, textord, \"✓\", \"\\\\checkmark\"); // AMS Hebrew\ndefineSymbol(math, ams, textord, \"ℶ\", \"\\\\beth\", true);\ndefineSymbol(math, ams, textord, \"ℸ\", \"\\\\daleth\", true);\ndefineSymbol(math, ams, textord, \"ℷ\", \"\\\\gimel\", true); // AMS Greek\ndefineSymbol(math, ams, textord, \"ϝ\", \"\\\\digamma\", true);\ndefineSymbol(math, ams, textord, \"ϰ\", \"\\\\varkappa\"); // AMS Delimiters\ndefineSymbol(math, ams, open, \"┌\", \"\\\\@ulcorner\", true);\ndefineSymbol(math, ams, close, \"┐\", \"\\\\@urcorner\", true);\ndefineSymbol(math, ams, open, \"└\", \"\\\\@llcorner\", true);\ndefineSymbol(math, ams, close, \"┘\", \"\\\\@lrcorner\", true); // AMS Binary Relations\ndefineSymbol(math, ams, rel, \"≦\", \"\\\\leqq\", true);\ndefineSymbol(math, ams, rel, \"⩽\", \"\\\\leqslant\", true);\ndefineSymbol(math, ams, rel, \"⪕\", \"\\\\eqslantless\", true);\ndefineSymbol(math, ams, rel, \"≲\", \"\\\\lesssim\", true);\ndefineSymbol(math, ams, rel, \"⪅\", \"\\\\lessapprox\", true);\ndefineSymbol(math, ams, rel, \"≊\", \"\\\\approxeq\", true);\ndefineSymbol(math, ams, bin, \"⋖\", \"\\\\lessdot\");\ndefineSymbol(math, ams, rel, \"⋘\", \"\\\\lll\", true);\ndefineSymbol(math, ams, rel, \"≶\", \"\\\\lessgtr\", true);\ndefineSymbol(math, ams, rel, \"⋚\", \"\\\\lesseqgtr\", true);\ndefineSymbol(math, ams, rel, \"⪋\", \"\\\\lesseqqgtr\", true);\ndefineSymbol(math, ams, rel, \"≑\", \"\\\\doteqdot\");\ndefineSymbol(math, ams, rel, \"≓\", \"\\\\risingdotseq\", true);\ndefineSymbol(math, ams, rel, \"≒\", \"\\\\fallingdotseq\", true);\ndefineSymbol(math, ams, rel, \"∽\", \"\\\\backsim\", true);\ndefineSymbol(math, ams, rel, \"⋍\", \"\\\\backsimeq\", true);\ndefineSymbol(math, ams, rel, \"⫅\", \"\\\\subseteqq\", true);\ndefineSymbol(math, ams, rel, \"⋐\", \"\\\\Subset\", true);\ndefineSymbol(math, ams, rel, \"⊏\", \"\\\\sqsubset\", true);\ndefineSymbol(math, ams, rel, \"≼\", \"\\\\preccurlyeq\", true);\ndefineSymbol(math, ams, rel, \"⋞\", \"\\\\curlyeqprec\", true);\ndefineSymbol(math, ams, rel, \"≾\", \"\\\\precsim\", true);\ndefineSymbol(math, ams, rel, \"⪷\", \"\\\\precapprox\", true);\ndefineSymbol(math, ams, rel, \"⊲\", \"\\\\vartriangleleft\");\ndefineSymbol(math, ams, rel, \"⊴\", \"\\\\trianglelefteq\");\ndefineSymbol(math, ams, rel, \"⊨\", \"\\\\vDash\", true);\ndefineSymbol(math, ams, rel, \"⊪\", \"\\\\Vvdash\", true);\ndefineSymbol(math, ams, rel, \"⌣\", \"\\\\smallsmile\");\ndefineSymbol(math, ams, rel, \"⌢\", \"\\\\smallfrown\");\ndefineSymbol(math, ams, rel, \"≏\", \"\\\\bumpeq\", true);\ndefineSymbol(math, ams, rel, \"≎\", \"\\\\Bumpeq\", true);\ndefineSymbol(math, ams, rel, \"≧\", \"\\\\geqq\", true);\ndefineSymbol(math, ams, rel, \"⩾\", \"\\\\geqslant\", true);\ndefineSymbol(math, ams, rel, \"⪖\", \"\\\\eqslantgtr\", true);\ndefineSymbol(math, ams, rel, \"≳\", \"\\\\gtrsim\", true);\ndefineSymbol(math, ams, rel, \"⪆\", \"\\\\gtrapprox\", true);\ndefineSymbol(math, ams, bin, \"⋗\", \"\\\\gtrdot\");\ndefineSymbol(math, ams, rel, \"⋙\", \"\\\\ggg\", true);\ndefineSymbol(math, ams, rel, \"≷\", \"\\\\gtrless\", true);\ndefineSymbol(math, ams, rel, \"⋛\", \"\\\\gtreqless\", true);\ndefineSymbol(math, ams, rel, \"⪌\", \"\\\\gtreqqless\", true);\ndefineSymbol(math, ams, rel, \"≖\", \"\\\\eqcirc\", true);\ndefineSymbol(math, ams, rel, \"≗\", \"\\\\circeq\", true);\ndefineSymbol(math, ams, rel, \"≜\", \"\\\\triangleq\", true);\ndefineSymbol(math, ams, rel, \"∼\", \"\\\\thicksim\");\ndefineSymbol(math, ams, rel, \"≈\", \"\\\\thickapprox\");\ndefineSymbol(math, ams, rel, \"⫆\", \"\\\\supseteqq\", true);\ndefineSymbol(math, ams, rel, \"⋑\", \"\\\\Supset\", true);\ndefineSymbol(math, ams, rel, \"⊐\", \"\\\\sqsupset\", true);\ndefineSymbol(math, ams, rel, \"≽\", \"\\\\succcurlyeq\", true);\ndefineSymbol(math, ams, rel, \"⋟\", \"\\\\curlyeqsucc\", true);\ndefineSymbol(math, ams, rel, \"≿\", \"\\\\succsim\", true);\ndefineSymbol(math, ams, rel, \"⪸\", \"\\\\succapprox\", true);\ndefineSymbol(math, ams, rel, \"⊳\", \"\\\\vartriangleright\");\ndefineSymbol(math, ams, rel, \"⊵\", \"\\\\trianglerighteq\");\ndefineSymbol(math, ams, rel, \"⊩\", \"\\\\Vdash\", true);\ndefineSymbol(math, ams, rel, \"∣\", \"\\\\shortmid\");\ndefineSymbol(math, ams, rel, \"∥\", \"\\\\shortparallel\");\ndefineSymbol(math, ams, rel, \"≬\", \"\\\\between\", true);\ndefineSymbol(math, ams, rel, \"⋔\", \"\\\\pitchfork\", true);\ndefineSymbol(math, ams, rel, \"∝\", \"\\\\varpropto\");\ndefineSymbol(math, ams, rel, \"◀\", \"\\\\blacktriangleleft\"); // unicode-math says that \\therefore is a mathord atom.\n// We kept the amssymb atom type, which is rel.\ndefineSymbol(math, ams, rel, \"∴\", \"\\\\therefore\", true);\ndefineSymbol(math, ams, rel, \"∍\", \"\\\\backepsilon\");\ndefineSymbol(math, ams, rel, \"▶\", \"\\\\blacktriangleright\"); // unicode-math says that \\because is a mathord atom.\n// We kept the amssymb atom type, which is rel.\ndefineSymbol(math, ams, rel, \"∵\", \"\\\\because\", true);\ndefineSymbol(math, ams, rel, \"⋘\", \"\\\\llless\");\ndefineSymbol(math, ams, rel, \"⋙\", \"\\\\gggtr\");\ndefineSymbol(math, ams, bin, \"⊲\", \"\\\\lhd\");\ndefineSymbol(math, ams, bin, \"⊳\", \"\\\\rhd\");\ndefineSymbol(math, ams, rel, \"≂\", \"\\\\eqsim\", true);\ndefineSymbol(math, main, rel, \"⋈\", \"\\\\Join\");\ndefineSymbol(math, ams, rel, \"≑\", \"\\\\Doteq\", true); // AMS Binary Operators\ndefineSymbol(math, ams, bin, \"∔\", \"\\\\dotplus\", true);\ndefineSymbol(math, ams, bin, \"∖\", \"\\\\smallsetminus\");\ndefineSymbol(math, ams, bin, \"⋒\", \"\\\\Cap\", true);\ndefineSymbol(math, ams, bin, \"⋓\", \"\\\\Cup\", true);\ndefineSymbol(math, ams, bin, \"⩞\", \"\\\\doublebarwedge\", true);\ndefineSymbol(math, ams, bin, \"⊟\", \"\\\\boxminus\", true);\ndefineSymbol(math, ams, bin, \"⊞\", \"\\\\boxplus\", true);\ndefineSymbol(math, ams, bin, \"⋇\", \"\\\\divideontimes\", true);\ndefineSymbol(math, ams, bin, \"⋉\", \"\\\\ltimes\", true);\ndefineSymbol(math, ams, bin, \"⋊\", \"\\\\rtimes\", true);\ndefineSymbol(math, ams, bin, \"⋋\", \"\\\\leftthreetimes\", true);\ndefineSymbol(math, ams, bin, \"⋌\", \"\\\\rightthreetimes\", true);\ndefineSymbol(math, ams, bin, \"⋏\", \"\\\\curlywedge\", true);\ndefineSymbol(math, ams, bin, \"⋎\", \"\\\\curlyvee\", true);\ndefineSymbol(math, ams, bin, \"⊝\", \"\\\\circleddash\", true);\ndefineSymbol(math, ams, bin, \"⊛\", \"\\\\circledast\", true);\ndefineSymbol(math, ams, bin, \"⋅\", \"\\\\centerdot\");\ndefineSymbol(math, ams, bin, \"⊺\", \"\\\\intercal\", true);\ndefineSymbol(math, ams, bin, \"⋒\", \"\\\\doublecap\");\ndefineSymbol(math, ams, bin, \"⋓\", \"\\\\doublecup\");\ndefineSymbol(math, ams, bin, \"⊠\", \"\\\\boxtimes\", true); // AMS Arrows\n// Note: unicode-math maps \\u21e2 to their own function \\rightdasharrow.\n// We'll map it to AMS function \\dashrightarrow. It produces the same atom.\ndefineSymbol(math, ams, rel, \"⇢\", \"\\\\dashrightarrow\", true); // unicode-math maps \\u21e0 to \\leftdasharrow. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"⇠\", \"\\\\dashleftarrow\", true);\ndefineSymbol(math, ams, rel, \"⇇\", \"\\\\leftleftarrows\", true);\ndefineSymbol(math, ams, rel, \"⇆\", \"\\\\leftrightarrows\", true);\ndefineSymbol(math, ams, rel, \"⇚\", \"\\\\Lleftarrow\", true);\ndefineSymbol(math, ams, rel, \"↞\", \"\\\\twoheadleftarrow\", true);\ndefineSymbol(math, ams, rel, \"↢\", \"\\\\leftarrowtail\", true);\ndefineSymbol(math, ams, rel, \"↫\", \"\\\\looparrowleft\", true);\ndefineSymbol(math, ams, rel, \"⇋\", \"\\\\leftrightharpoons\", true);\ndefineSymbol(math, ams, rel, \"↶\", \"\\\\curvearrowleft\", true); // unicode-math maps \\u21ba to \\acwopencirclearrow. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"↺\", \"\\\\circlearrowleft\", true);\ndefineSymbol(math, ams, rel, \"↰\", \"\\\\Lsh\", true);\ndefineSymbol(math, ams, rel, \"⇈\", \"\\\\upuparrows\", true);\ndefineSymbol(math, ams, rel, \"↿\", \"\\\\upharpoonleft\", true);\ndefineSymbol(math, ams, rel, \"⇃\", \"\\\\downharpoonleft\", true);\ndefineSymbol(math, main, rel, \"⊶\", \"\\\\origof\", true); // not in font\ndefineSymbol(math, main, rel, \"⊷\", \"\\\\imageof\", true); // not in font\ndefineSymbol(math, ams, rel, \"⊸\", \"\\\\multimap\", true);\ndefineSymbol(math, ams, rel, \"↭\", \"\\\\leftrightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"⇉\", \"\\\\rightrightarrows\", true);\ndefineSymbol(math, ams, rel, \"⇄\", \"\\\\rightleftarrows\", true);\ndefineSymbol(math, ams, rel, \"↠\", \"\\\\twoheadrightarrow\", true);\ndefineSymbol(math, ams, rel, \"↣\", \"\\\\rightarrowtail\", true);\ndefineSymbol(math, ams, rel, \"↬\", \"\\\\looparrowright\", true);\ndefineSymbol(math, ams, rel, \"↷\", \"\\\\curvearrowright\", true); // unicode-math maps \\u21bb to \\cwopencirclearrow. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"↻\", \"\\\\circlearrowright\", true);\ndefineSymbol(math, ams, rel, \"↱\", \"\\\\Rsh\", true);\ndefineSymbol(math, ams, rel, \"⇊\", \"\\\\downdownarrows\", true);\ndefineSymbol(math, ams, rel, \"↾\", \"\\\\upharpoonright\", true);\ndefineSymbol(math, ams, rel, \"⇂\", \"\\\\downharpoonright\", true);\ndefineSymbol(math, ams, rel, \"⇝\", \"\\\\rightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"⇝\", \"\\\\leadsto\");\ndefineSymbol(math, ams, rel, \"⇛\", \"\\\\Rrightarrow\", true);\ndefineSymbol(math, ams, rel, \"↾\", \"\\\\restriction\");\ndefineSymbol(math, main, textord, \"‘\", \"`\");\ndefineSymbol(math, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\textdollar\");\ndefineSymbol(math, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(text, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(math, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\textunderscore\");\ndefineSymbol(math, main, textord, \"∠\", \"\\\\angle\", true);\ndefineSymbol(math, main, textord, \"∞\", \"\\\\infty\", true);\ndefineSymbol(math, main, textord, \"′\", \"\\\\prime\");\ndefineSymbol(math, main, textord, \"△\", \"\\\\triangle\");\ndefineSymbol(math, main, textord, \"Γ\", \"\\\\Gamma\", true);\ndefineSymbol(math, main, textord, \"Δ\", \"\\\\Delta\", true);\ndefineSymbol(math, main, textord, \"Θ\", \"\\\\Theta\", true);\ndefineSymbol(math, main, textord, \"Λ\", \"\\\\Lambda\", true);\ndefineSymbol(math, main, textord, \"Ξ\", \"\\\\Xi\", true);\ndefineSymbol(math, main, textord, \"Π\", \"\\\\Pi\", true);\ndefineSymbol(math, main, textord, \"Σ\", \"\\\\Sigma\", true);\ndefineSymbol(math, main, textord, \"Υ\", \"\\\\Upsilon\", true);\ndefineSymbol(math, main, textord, \"Φ\", \"\\\\Phi\", true);\ndefineSymbol(math, main, textord, \"Ψ\", \"\\\\Psi\", true);\ndefineSymbol(math, main, textord, \"Ω\", \"\\\\Omega\", true);\ndefineSymbol(math, main, textord, \"A\", \"Α\");\ndefineSymbol(math, main, textord, \"B\", \"Β\");\ndefineSymbol(math, main, textord, \"E\", \"Ε\");\ndefineSymbol(math, main, textord, \"Z\", \"Ζ\");\ndefineSymbol(math, main, textord, \"H\", \"Η\");\ndefineSymbol(math, main, textord, \"I\", \"Ι\");\ndefineSymbol(math, main, textord, \"K\", \"Κ\");\ndefineSymbol(math, main, textord, \"M\", \"Μ\");\ndefineSymbol(math, main, textord, \"N\", \"Ν\");\ndefineSymbol(math, main, textord, \"O\", \"Ο\");\ndefineSymbol(math, main, textord, \"P\", \"Ρ\");\ndefineSymbol(math, main, textord, \"T\", \"Τ\");\ndefineSymbol(math, main, textord, \"X\", \"Χ\");\ndefineSymbol(math, main, textord, \"\\xac\", \"\\\\neg\", true);\ndefineSymbol(math, main, textord, \"\\xac\", \"\\\\lnot\");\ndefineSymbol(math, main, textord, \"⊤\", \"\\\\top\");\ndefineSymbol(math, main, textord, \"⊥\", \"\\\\bot\");\ndefineSymbol(math, main, textord, \"∅\", \"\\\\emptyset\");\ndefineSymbol(math, ams, textord, \"∅\", \"\\\\varnothing\");\ndefineSymbol(math, main, mathord, \"α\", \"\\\\alpha\", true);\ndefineSymbol(math, main, mathord, \"β\", \"\\\\beta\", true);\ndefineSymbol(math, main, mathord, \"γ\", \"\\\\gamma\", true);\ndefineSymbol(math, main, mathord, \"δ\", \"\\\\delta\", true);\ndefineSymbol(math, main, mathord, \"ϵ\", \"\\\\epsilon\", true);\ndefineSymbol(math, main, mathord, \"ζ\", \"\\\\zeta\", true);\ndefineSymbol(math, main, mathord, \"η\", \"\\\\eta\", true);\ndefineSymbol(math, main, mathord, \"θ\", \"\\\\theta\", true);\ndefineSymbol(math, main, mathord, \"ι\", \"\\\\iota\", true);\ndefineSymbol(math, main, mathord, \"κ\", \"\\\\kappa\", true);\ndefineSymbol(math, main, mathord, \"λ\", \"\\\\lambda\", true);\ndefineSymbol(math, main, mathord, \"μ\", \"\\\\mu\", true);\ndefineSymbol(math, main, mathord, \"ν\", \"\\\\nu\", true);\ndefineSymbol(math, main, mathord, \"ξ\", \"\\\\xi\", true);\ndefineSymbol(math, main, mathord, \"ο\", \"\\\\omicron\", true);\ndefineSymbol(math, main, mathord, \"π\", \"\\\\pi\", true);\ndefineSymbol(math, main, mathord, \"ρ\", \"\\\\rho\", true);\ndefineSymbol(math, main, mathord, \"σ\", \"\\\\sigma\", true);\ndefineSymbol(math, main, mathord, \"τ\", \"\\\\tau\", true);\ndefineSymbol(math, main, mathord, \"υ\", \"\\\\upsilon\", true);\ndefineSymbol(math, main, mathord, \"ϕ\", \"\\\\phi\", true);\ndefineSymbol(math, main, mathord, \"χ\", \"\\\\chi\", true);\ndefineSymbol(math, main, mathord, \"ψ\", \"\\\\psi\", true);\ndefineSymbol(math, main, mathord, \"ω\", \"\\\\omega\", true);\ndefineSymbol(math, main, mathord, \"ε\", \"\\\\varepsilon\", true);\ndefineSymbol(math, main, mathord, \"ϑ\", \"\\\\vartheta\", true);\ndefineSymbol(math, main, mathord, \"ϖ\", \"\\\\varpi\", true);\ndefineSymbol(math, main, mathord, \"ϱ\", \"\\\\varrho\", true);\ndefineSymbol(math, main, mathord, \"ς\", \"\\\\varsigma\", true);\ndefineSymbol(math, main, mathord, \"φ\", \"\\\\varphi\", true);\ndefineSymbol(math, main, bin, \"∗\", \"*\", true);\ndefineSymbol(math, main, bin, \"+\", \"+\");\ndefineSymbol(math, main, bin, \"−\", \"-\", true);\ndefineSymbol(math, main, bin, \"⋅\", \"\\\\cdot\", true);\ndefineSymbol(math, main, bin, \"∘\", \"\\\\circ\", true);\ndefineSymbol(math, main, bin, \"\\xf7\", \"\\\\div\", true);\ndefineSymbol(math, main, bin, \"\\xb1\", \"\\\\pm\", true);\ndefineSymbol(math, main, bin, \"\\xd7\", \"\\\\times\", true);\ndefineSymbol(math, main, bin, \"∩\", \"\\\\cap\", true);\ndefineSymbol(math, main, bin, \"∪\", \"\\\\cup\", true);\ndefineSymbol(math, main, bin, \"∖\", \"\\\\setminus\", true);\ndefineSymbol(math, main, bin, \"∧\", \"\\\\land\");\ndefineSymbol(math, main, bin, \"∨\", \"\\\\lor\");\ndefineSymbol(math, main, bin, \"∧\", \"\\\\wedge\", true);\ndefineSymbol(math, main, bin, \"∨\", \"\\\\vee\", true);\ndefineSymbol(math, main, textord, \"√\", \"\\\\surd\");\ndefineSymbol(math, main, open, \"⟨\", \"\\\\langle\", true);\ndefineSymbol(math, main, open, \"∣\", \"\\\\lvert\");\ndefineSymbol(math, main, open, \"∥\", \"\\\\lVert\");\ndefineSymbol(math, main, close, \"?\", \"?\");\ndefineSymbol(math, main, close, \"!\", \"!\");\ndefineSymbol(math, main, close, \"⟩\", \"\\\\rangle\", true);\ndefineSymbol(math, main, close, \"∣\", \"\\\\rvert\");\ndefineSymbol(math, main, close, \"∥\", \"\\\\rVert\");\ndefineSymbol(math, main, rel, \"=\", \"=\");\ndefineSymbol(math, main, rel, \":\", \":\");\ndefineSymbol(math, main, rel, \"≈\", \"\\\\approx\", true);\ndefineSymbol(math, main, rel, \"≅\", \"\\\\cong\", true);\ndefineSymbol(math, main, rel, \"≥\", \"\\\\ge\");\ndefineSymbol(math, main, rel, \"≥\", \"\\\\geq\", true);\ndefineSymbol(math, main, rel, \"←\", \"\\\\gets\");\ndefineSymbol(math, main, rel, \">\", \"\\\\gt\", true);\ndefineSymbol(math, main, rel, \"∈\", \"\\\\in\", true);\ndefineSymbol(math, main, rel, \"\", \"\\\\@not\");\ndefineSymbol(math, main, rel, \"⊂\", \"\\\\subset\", true);\ndefineSymbol(math, main, rel, \"⊃\", \"\\\\supset\", true);\ndefineSymbol(math, main, rel, \"⊆\", \"\\\\subseteq\", true);\ndefineSymbol(math, main, rel, \"⊇\", \"\\\\supseteq\", true);\ndefineSymbol(math, ams, rel, \"⊈\", \"\\\\nsubseteq\", true);\ndefineSymbol(math, ams, rel, \"⊉\", \"\\\\nsupseteq\", true);\ndefineSymbol(math, main, rel, \"⊨\", \"\\\\models\");\ndefineSymbol(math, main, rel, \"←\", \"\\\\leftarrow\", true);\ndefineSymbol(math, main, rel, \"≤\", \"\\\\le\");\ndefineSymbol(math, main, rel, \"≤\", \"\\\\leq\", true);\ndefineSymbol(math, main, rel, \"<\", \"\\\\lt\", true);\ndefineSymbol(math, main, rel, \"→\", \"\\\\rightarrow\", true);\ndefineSymbol(math, main, rel, \"→\", \"\\\\to\");\ndefineSymbol(math, ams, rel, \"≱\", \"\\\\ngeq\", true);\ndefineSymbol(math, ams, rel, \"≰\", \"\\\\nleq\", true);\ndefineSymbol(math, main, spacing, \"\\xa0\", \"\\\\ \");\ndefineSymbol(math, main, spacing, \"\\xa0\", \"\\\\space\"); // Ref: LaTeX Source 2e: \\DeclareRobustCommand{\\nobreakspace}{%\ndefineSymbol(math, main, spacing, \"\\xa0\", \"\\\\nobreakspace\");\ndefineSymbol(text, main, spacing, \"\\xa0\", \"\\\\ \");\ndefineSymbol(text, main, spacing, \"\\xa0\", \" \");\ndefineSymbol(text, main, spacing, \"\\xa0\", \"\\\\space\");\ndefineSymbol(text, main, spacing, \"\\xa0\", \"\\\\nobreakspace\");\ndefineSymbol(math, main, spacing, null, \"\\\\nobreak\");\ndefineSymbol(math, main, spacing, null, \"\\\\allowbreak\");\ndefineSymbol(math, main, punct, \",\", \",\");\ndefineSymbol(math, main, punct, \";\", \";\");\ndefineSymbol(math, ams, bin, \"⊼\", \"\\\\barwedge\", true);\ndefineSymbol(math, ams, bin, \"⊻\", \"\\\\veebar\", true);\ndefineSymbol(math, main, bin, \"⊙\", \"\\\\odot\", true);\ndefineSymbol(math, main, bin, \"⊕\", \"\\\\oplus\", true);\ndefineSymbol(math, main, bin, \"⊗\", \"\\\\otimes\", true);\ndefineSymbol(math, main, textord, \"∂\", \"\\\\partial\", true);\ndefineSymbol(math, main, bin, \"⊘\", \"\\\\oslash\", true);\ndefineSymbol(math, ams, bin, \"⊚\", \"\\\\circledcirc\", true);\ndefineSymbol(math, ams, bin, \"⊡\", \"\\\\boxdot\", true);\ndefineSymbol(math, main, bin, \"△\", \"\\\\bigtriangleup\");\ndefineSymbol(math, main, bin, \"▽\", \"\\\\bigtriangledown\");\ndefineSymbol(math, main, bin, \"†\", \"\\\\dagger\");\ndefineSymbol(math, main, bin, \"⋄\", \"\\\\diamond\");\ndefineSymbol(math, main, bin, \"⋆\", \"\\\\star\");\ndefineSymbol(math, main, bin, \"◃\", \"\\\\triangleleft\");\ndefineSymbol(math, main, bin, \"▹\", \"\\\\triangleright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\textbraceleft\");\ndefineSymbol(math, main, close, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\textbraceright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\lbrace\");\ndefineSymbol(math, main, close, \"}\", \"\\\\rbrace\");\ndefineSymbol(math, main, open, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(text, main, textord, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(math, main, close, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(text, main, textord, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(math, main, open, \"(\", \"\\\\lparen\", true);\ndefineSymbol(math, main, close, \")\", \"\\\\rparen\", true);\ndefineSymbol(text, main, textord, \"<\", \"\\\\textless\", true); // in T1 fontenc\ndefineSymbol(text, main, textord, \">\", \"\\\\textgreater\", true); // in T1 fontenc\ndefineSymbol(math, main, open, \"⌊\", \"\\\\lfloor\", true);\ndefineSymbol(math, main, close, \"⌋\", \"\\\\rfloor\", true);\ndefineSymbol(math, main, open, \"⌈\", \"\\\\lceil\", true);\ndefineSymbol(math, main, close, \"⌉\", \"\\\\rceil\", true);\ndefineSymbol(math, main, textord, \"\\\\\", \"\\\\backslash\");\ndefineSymbol(math, main, textord, \"∣\", \"|\");\ndefineSymbol(math, main, textord, \"∣\", \"\\\\vert\");\ndefineSymbol(text, main, textord, \"|\", \"\\\\textbar\", true); // in T1 fontenc\ndefineSymbol(math, main, textord, \"∥\", \"\\\\|\");\ndefineSymbol(math, main, textord, \"∥\", \"\\\\Vert\");\ndefineSymbol(text, main, textord, \"∥\", \"\\\\textbardbl\");\ndefineSymbol(text, main, textord, \"~\", \"\\\\textasciitilde\");\ndefineSymbol(text, main, textord, \"\\\\\", \"\\\\textbackslash\");\ndefineSymbol(text, main, textord, \"^\", \"\\\\textasciicircum\");\ndefineSymbol(math, main, rel, \"↑\", \"\\\\uparrow\", true);\ndefineSymbol(math, main, rel, \"⇑\", \"\\\\Uparrow\", true);\ndefineSymbol(math, main, rel, \"↓\", \"\\\\downarrow\", true);\ndefineSymbol(math, main, rel, \"⇓\", \"\\\\Downarrow\", true);\ndefineSymbol(math, main, rel, \"↕\", \"\\\\updownarrow\", true);\ndefineSymbol(math, main, rel, \"⇕\", \"\\\\Updownarrow\", true);\ndefineSymbol(math, main, op, \"∐\", \"\\\\coprod\");\ndefineSymbol(math, main, op, \"⋁\", \"\\\\bigvee\");\ndefineSymbol(math, main, op, \"⋀\", \"\\\\bigwedge\");\ndefineSymbol(math, main, op, \"⨄\", \"\\\\biguplus\");\ndefineSymbol(math, main, op, \"⋂\", \"\\\\bigcap\");\ndefineSymbol(math, main, op, \"⋃\", \"\\\\bigcup\");\ndefineSymbol(math, main, op, \"∫\", \"\\\\int\");\ndefineSymbol(math, main, op, \"∫\", \"\\\\intop\");\ndefineSymbol(math, main, op, \"∬\", \"\\\\iint\");\ndefineSymbol(math, main, op, \"∭\", \"\\\\iiint\");\ndefineSymbol(math, main, op, \"∏\", \"\\\\prod\");\ndefineSymbol(math, main, op, \"∑\", \"\\\\sum\");\ndefineSymbol(math, main, op, \"⨂\", \"\\\\bigotimes\");\ndefineSymbol(math, main, op, \"⨁\", \"\\\\bigoplus\");\ndefineSymbol(math, main, op, \"⨀\", \"\\\\bigodot\");\ndefineSymbol(math, main, op, \"∮\", \"\\\\oint\");\ndefineSymbol(math, main, op, \"∯\", \"\\\\oiint\");\ndefineSymbol(math, main, op, \"∰\", \"\\\\oiiint\");\ndefineSymbol(math, main, op, \"⨆\", \"\\\\bigsqcup\");\ndefineSymbol(math, main, op, \"∫\", \"\\\\smallint\");\ndefineSymbol(text, main, inner, \"…\", \"\\\\textellipsis\");\ndefineSymbol(math, main, inner, \"…\", \"\\\\mathellipsis\");\ndefineSymbol(text, main, inner, \"…\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"…\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"⋯\", \"\\\\@cdots\", true);\ndefineSymbol(math, main, inner, \"⋱\", \"\\\\ddots\", true);\ndefineSymbol(math, main, textord, \"⋮\", \"\\\\varvdots\"); // \\vdots is a macro\ndefineSymbol(math, main, accent, \"ˊ\", \"\\\\acute\");\ndefineSymbol(math, main, accent, \"ˋ\", \"\\\\grave\");\ndefineSymbol(math, main, accent, \"\\xa8\", \"\\\\ddot\");\ndefineSymbol(math, main, accent, \"~\", \"\\\\tilde\");\ndefineSymbol(math, main, accent, \"ˉ\", \"\\\\bar\");\ndefineSymbol(math, main, accent, \"˘\", \"\\\\breve\");\ndefineSymbol(math, main, accent, \"ˇ\", \"\\\\check\");\ndefineSymbol(math, main, accent, \"^\", \"\\\\hat\");\ndefineSymbol(math, main, accent, \"⃗\", \"\\\\vec\");\ndefineSymbol(math, main, accent, \"˙\", \"\\\\dot\");\ndefineSymbol(math, main, accent, \"˚\", \"\\\\mathring\"); // \\imath and \\jmath should be invariant to \\mathrm, \\mathbf, etc., so use PUA\ndefineSymbol(math, main, mathord, \"\", \"\\\\@imath\");\ndefineSymbol(math, main, mathord, \"\", \"\\\\@jmath\");\ndefineSymbol(math, main, textord, \"ı\", \"ı\");\ndefineSymbol(math, main, textord, \"ȷ\", \"ȷ\");\ndefineSymbol(text, main, textord, \"ı\", \"\\\\i\", true);\ndefineSymbol(text, main, textord, \"ȷ\", \"\\\\j\", true);\ndefineSymbol(text, main, textord, \"\\xdf\", \"\\\\ss\", true);\ndefineSymbol(text, main, textord, \"\\xe6\", \"\\\\ae\", true);\ndefineSymbol(text, main, textord, \"œ\", \"\\\\oe\", true);\ndefineSymbol(text, main, textord, \"\\xf8\", \"\\\\o\", true);\ndefineSymbol(text, main, textord, \"\\xc6\", \"\\\\AE\", true);\ndefineSymbol(text, main, textord, \"Œ\", \"\\\\OE\", true);\ndefineSymbol(text, main, textord, \"\\xd8\", \"\\\\O\", true);\ndefineSymbol(text, main, accent, \"ˊ\", \"\\\\'\"); // acute\ndefineSymbol(text, main, accent, \"ˋ\", \"\\\\`\"); // grave\ndefineSymbol(text, main, accent, \"ˆ\", \"\\\\^\"); // circumflex\ndefineSymbol(text, main, accent, \"˜\", \"\\\\~\"); // tilde\ndefineSymbol(text, main, accent, \"ˉ\", \"\\\\=\"); // macron\ndefineSymbol(text, main, accent, \"˘\", \"\\\\u\"); // breve\ndefineSymbol(text, main, accent, \"˙\", \"\\\\.\"); // dot above\ndefineSymbol(text, main, accent, \"\\xb8\", \"\\\\c\"); // cedilla\ndefineSymbol(text, main, accent, \"˚\", \"\\\\r\"); // ring above\ndefineSymbol(text, main, accent, \"ˇ\", \"\\\\v\"); // caron\ndefineSymbol(text, main, accent, \"\\xa8\", '\\\\\"'); // diaresis\ndefineSymbol(text, main, accent, \"˝\", \"\\\\H\"); // double acute\ndefineSymbol(text, main, accent, \"◯\", \"\\\\textcircled\"); // \\bigcirc glyph\n// These ligatures are detected and created in Parser.js's `formLigatures`.\nvar ligatures = {\n    \"--\": true,\n    \"---\": true,\n    \"``\": true,\n    \"''\": true\n};\ndefineSymbol(text, main, textord, \"–\", \"--\", true);\ndefineSymbol(text, main, textord, \"–\", \"\\\\textendash\");\ndefineSymbol(text, main, textord, \"—\", \"---\", true);\ndefineSymbol(text, main, textord, \"—\", \"\\\\textemdash\");\ndefineSymbol(text, main, textord, \"‘\", \"`\", true);\ndefineSymbol(text, main, textord, \"‘\", \"\\\\textquoteleft\");\ndefineSymbol(text, main, textord, \"’\", \"'\", true);\ndefineSymbol(text, main, textord, \"’\", \"\\\\textquoteright\");\ndefineSymbol(text, main, textord, \"“\", \"``\", true);\ndefineSymbol(text, main, textord, \"“\", \"\\\\textquotedblleft\");\ndefineSymbol(text, main, textord, \"”\", \"''\", true);\ndefineSymbol(text, main, textord, \"”\", \"\\\\textquotedblright\"); //  \\degree from gensymb package\ndefineSymbol(math, main, textord, \"\\xb0\", \"\\\\degree\", true);\ndefineSymbol(text, main, textord, \"\\xb0\", \"\\\\degree\"); // \\textdegree from inputenc package\ndefineSymbol(text, main, textord, \"\\xb0\", \"\\\\textdegree\", true); // TODO: In LaTeX, \\pounds can generate a different character in text and math\n// mode, but among our fonts, only Main-Regular defines this character \"163\".\ndefineSymbol(math, main, textord, \"\\xa3\", \"\\\\pounds\");\ndefineSymbol(math, main, textord, \"\\xa3\", \"\\\\mathsterling\", true);\ndefineSymbol(text, main, textord, \"\\xa3\", \"\\\\pounds\");\ndefineSymbol(text, main, textord, \"\\xa3\", \"\\\\textsterling\", true);\ndefineSymbol(math, ams, textord, \"✠\", \"\\\\maltese\");\ndefineSymbol(text, ams, textord, \"✠\", \"\\\\maltese\"); // There are lots of symbols which are the same, so we add them in afterwards.\n// All of these are textords in math mode\nvar mathTextSymbols = '0123456789/@.\"';\nfor(var i = 0; i < mathTextSymbols.length; i++){\n    var ch = mathTextSymbols.charAt(i);\n    defineSymbol(math, main, textord, ch, ch);\n} // All of these are textords in text mode\nvar textSymbols = '0123456789!@*()-=+\";:?/.,';\nfor(var _i = 0; _i < textSymbols.length; _i++){\n    var _ch = textSymbols.charAt(_i);\n    defineSymbol(text, main, textord, _ch, _ch);\n} // All of these are textords in text mode, and mathords in math mode\nvar letters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\nfor(var _i2 = 0; _i2 < letters.length; _i2++){\n    var _ch2 = letters.charAt(_i2);\n    defineSymbol(math, main, mathord, _ch2, _ch2);\n    defineSymbol(text, main, textord, _ch2, _ch2);\n} // Blackboard bold and script letters in Unicode range\ndefineSymbol(math, ams, textord, \"C\", \"ℂ\"); // blackboard bold\ndefineSymbol(text, ams, textord, \"C\", \"ℂ\");\ndefineSymbol(math, ams, textord, \"H\", \"ℍ\");\ndefineSymbol(text, ams, textord, \"H\", \"ℍ\");\ndefineSymbol(math, ams, textord, \"N\", \"ℕ\");\ndefineSymbol(text, ams, textord, \"N\", \"ℕ\");\ndefineSymbol(math, ams, textord, \"P\", \"ℙ\");\ndefineSymbol(text, ams, textord, \"P\", \"ℙ\");\ndefineSymbol(math, ams, textord, \"Q\", \"ℚ\");\ndefineSymbol(text, ams, textord, \"Q\", \"ℚ\");\ndefineSymbol(math, ams, textord, \"R\", \"ℝ\");\ndefineSymbol(text, ams, textord, \"R\", \"ℝ\");\ndefineSymbol(math, ams, textord, \"Z\", \"ℤ\");\ndefineSymbol(text, ams, textord, \"Z\", \"ℤ\");\ndefineSymbol(math, main, mathord, \"h\", \"ℎ\"); // italic h, Planck constant\ndefineSymbol(text, main, mathord, \"h\", \"ℎ\"); // The next loop loads wide (surrogate pair) characters.\n// We support some letters in the Unicode range U+1D400 to U+1D7FF,\n// Mathematical Alphanumeric Symbols.\n// Some editors do not deal well with wide characters. So don't write the\n// string into this file. Instead, create the string from the surrogate pair.\nvar wideChar = \"\";\nfor(var _i3 = 0; _i3 < letters.length; _i3++){\n    var _ch3 = letters.charAt(_i3); // The hex numbers in the next line are a surrogate pair.\n    // 0xD835 is the high surrogate for all letters in the range we support.\n    // 0xDC00 is the low surrogate for bold A.\n    wideChar = String.fromCharCode(0xD835, 0xDC00 + _i3); // A-Z a-z bold\n    defineSymbol(math, main, mathord, _ch3, wideChar);\n    defineSymbol(text, main, textord, _ch3, wideChar);\n    wideChar = String.fromCharCode(0xD835, 0xDC34 + _i3); // A-Z a-z italic\n    defineSymbol(math, main, mathord, _ch3, wideChar);\n    defineSymbol(text, main, textord, _ch3, wideChar);\n    wideChar = String.fromCharCode(0xD835, 0xDC68 + _i3); // A-Z a-z bold italic\n    defineSymbol(math, main, mathord, _ch3, wideChar);\n    defineSymbol(text, main, textord, _ch3, wideChar);\n    wideChar = String.fromCharCode(0xD835, 0xDD04 + _i3); // A-Z a-z Fractur\n    defineSymbol(math, main, mathord, _ch3, wideChar);\n    defineSymbol(text, main, textord, _ch3, wideChar);\n    wideChar = String.fromCharCode(0xD835, 0xDDA0 + _i3); // A-Z a-z sans-serif\n    defineSymbol(math, main, mathord, _ch3, wideChar);\n    defineSymbol(text, main, textord, _ch3, wideChar);\n    wideChar = String.fromCharCode(0xD835, 0xDDD4 + _i3); // A-Z a-z sans bold\n    defineSymbol(math, main, mathord, _ch3, wideChar);\n    defineSymbol(text, main, textord, _ch3, wideChar);\n    wideChar = String.fromCharCode(0xD835, 0xDE08 + _i3); // A-Z a-z sans italic\n    defineSymbol(math, main, mathord, _ch3, wideChar);\n    defineSymbol(text, main, textord, _ch3, wideChar);\n    wideChar = String.fromCharCode(0xD835, 0xDE70 + _i3); // A-Z a-z monospace\n    defineSymbol(math, main, mathord, _ch3, wideChar);\n    defineSymbol(text, main, textord, _ch3, wideChar);\n    if (_i3 < 26) {\n        // KaTeX fonts have only capital letters for blackboard bold and script.\n        // See exception for k below.\n        wideChar = String.fromCharCode(0xD835, 0xDD38 + _i3); // A-Z double struck\n        defineSymbol(math, main, mathord, _ch3, wideChar);\n        defineSymbol(text, main, textord, _ch3, wideChar);\n        wideChar = String.fromCharCode(0xD835, 0xDC9C + _i3); // A-Z script\n        defineSymbol(math, main, mathord, _ch3, wideChar);\n        defineSymbol(text, main, textord, _ch3, wideChar);\n    } // TODO: Add bold script when it is supported by a KaTeX font.\n} // \"k\" is the only double struck lower case letter in the KaTeX fonts.\nwideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck\ndefineSymbol(math, main, mathord, \"k\", wideChar);\ndefineSymbol(text, main, textord, \"k\", wideChar); // Next, some wide character numerals\nfor(var _i4 = 0; _i4 < 10; _i4++){\n    var _ch4 = _i4.toString();\n    wideChar = String.fromCharCode(0xD835, 0xDFCE + _i4); // 0-9 bold\n    defineSymbol(math, main, mathord, _ch4, wideChar);\n    defineSymbol(text, main, textord, _ch4, wideChar);\n    wideChar = String.fromCharCode(0xD835, 0xDFE2 + _i4); // 0-9 sans serif\n    defineSymbol(math, main, mathord, _ch4, wideChar);\n    defineSymbol(text, main, textord, _ch4, wideChar);\n    wideChar = String.fromCharCode(0xD835, 0xDFEC + _i4); // 0-9 bold sans\n    defineSymbol(math, main, mathord, _ch4, wideChar);\n    defineSymbol(text, main, textord, _ch4, wideChar);\n    wideChar = String.fromCharCode(0xD835, 0xDFF6 + _i4); // 0-9 monospace\n    defineSymbol(math, main, mathord, _ch4, wideChar);\n    defineSymbol(text, main, textord, _ch4, wideChar);\n} // We add these Latin-1 letters as symbols for backwards-compatibility,\n// but they are not actually in the font, nor are they supported by the\n// Unicode accent mechanism, so they fall back to Times font and look ugly.\n// TODO(edemaine): Fix this.\nvar extraLatin = \"\\xd0\\xde\\xfe\";\nfor(var _i5 = 0; _i5 < extraLatin.length; _i5++){\n    var _ch5 = extraLatin.charAt(_i5);\n    defineSymbol(math, main, mathord, _ch5, _ch5);\n    defineSymbol(text, main, textord, _ch5, _ch5);\n}\n/**\n * This file provides support for Unicode range U+1D400 to U+1D7FF,\n * Mathematical Alphanumeric Symbols.\n *\n * Function wideCharacterFont takes a wide character as input and returns\n * the font information necessary to render it properly.\n */ /**\n * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf\n * That document sorts characters into groups by font type, say bold or italic.\n *\n * In the arrays below, each subarray consists three elements:\n *      * The CSS class of that group when in math mode.\n *      * The CSS class of that group when in text mode.\n *      * The font name, so that KaTeX can get font metrics.\n */ var wideLatinLetterData = [\n    [\n        \"mathbf\",\n        \"textbf\",\n        \"Main-Bold\"\n    ],\n    [\n        \"mathbf\",\n        \"textbf\",\n        \"Main-Bold\"\n    ],\n    [\n        \"mathnormal\",\n        \"textit\",\n        \"Math-Italic\"\n    ],\n    [\n        \"mathnormal\",\n        \"textit\",\n        \"Math-Italic\"\n    ],\n    [\n        \"boldsymbol\",\n        \"boldsymbol\",\n        \"Main-BoldItalic\"\n    ],\n    [\n        \"boldsymbol\",\n        \"boldsymbol\",\n        \"Main-BoldItalic\"\n    ],\n    // Map fancy A-Z letters to script, not calligraphic.\n    // This aligns with unicode-math and math fonts (except Cambria Math).\n    [\n        \"mathscr\",\n        \"textscr\",\n        \"Script-Regular\"\n    ],\n    [\n        \"\",\n        \"\",\n        \"\"\n    ],\n    [\n        \"\",\n        \"\",\n        \"\"\n    ],\n    [\n        \"\",\n        \"\",\n        \"\"\n    ],\n    [\n        \"mathfrak\",\n        \"textfrak\",\n        \"Fraktur-Regular\"\n    ],\n    [\n        \"mathfrak\",\n        \"textfrak\",\n        \"Fraktur-Regular\"\n    ],\n    [\n        \"mathbb\",\n        \"textbb\",\n        \"AMS-Regular\"\n    ],\n    [\n        \"mathbb\",\n        \"textbb\",\n        \"AMS-Regular\"\n    ],\n    [\n        \"\",\n        \"\",\n        \"\"\n    ],\n    [\n        \"\",\n        \"\",\n        \"\"\n    ],\n    [\n        \"mathsf\",\n        \"textsf\",\n        \"SansSerif-Regular\"\n    ],\n    [\n        \"mathsf\",\n        \"textsf\",\n        \"SansSerif-Regular\"\n    ],\n    [\n        \"mathboldsf\",\n        \"textboldsf\",\n        \"SansSerif-Bold\"\n    ],\n    [\n        \"mathboldsf\",\n        \"textboldsf\",\n        \"SansSerif-Bold\"\n    ],\n    [\n        \"mathitsf\",\n        \"textitsf\",\n        \"SansSerif-Italic\"\n    ],\n    [\n        \"mathitsf\",\n        \"textitsf\",\n        \"SansSerif-Italic\"\n    ],\n    [\n        \"\",\n        \"\",\n        \"\"\n    ],\n    [\n        \"\",\n        \"\",\n        \"\"\n    ],\n    [\n        \"mathtt\",\n        \"texttt\",\n        \"Typewriter-Regular\"\n    ],\n    [\n        \"mathtt\",\n        \"texttt\",\n        \"Typewriter-Regular\"\n    ] // a-z monospace\n];\nvar wideNumeralData = [\n    [\n        \"mathbf\",\n        \"textbf\",\n        \"Main-Bold\"\n    ],\n    [\n        \"\",\n        \"\",\n        \"\"\n    ],\n    [\n        \"mathsf\",\n        \"textsf\",\n        \"SansSerif-Regular\"\n    ],\n    [\n        \"mathboldsf\",\n        \"textboldsf\",\n        \"SansSerif-Bold\"\n    ],\n    [\n        \"mathtt\",\n        \"texttt\",\n        \"Typewriter-Regular\"\n    ] // 0-9 monospace\n];\nvar wideCharacterFont = function wideCharacterFont(wideChar, mode) {\n    // IE doesn't support codePointAt(). So work with the surrogate pair.\n    var H = wideChar.charCodeAt(0); // high surrogate\n    var L = wideChar.charCodeAt(1); // low surrogate\n    var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;\n    var j = mode === \"math\" ? 0 : 1; // column index for CSS class.\n    if (0x1D400 <= codePoint && codePoint < 0x1D6A4) {\n        // wideLatinLetterData contains exactly 26 chars on each row.\n        // So we can calculate the relevant row. No traverse necessary.\n        var i = Math.floor((codePoint - 0x1D400) / 26);\n        return [\n            wideLatinLetterData[i][2],\n            wideLatinLetterData[i][j]\n        ];\n    } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) {\n        // Numerals, ten per row.\n        var _i = Math.floor((codePoint - 0x1D7CE) / 10);\n        return [\n            wideNumeralData[_i][2],\n            wideNumeralData[_i][j]\n        ];\n    } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) {\n        // dotless i or j\n        return [\n            wideLatinLetterData[0][2],\n            wideLatinLetterData[0][j]\n        ];\n    } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) {\n        // Greek letters. Not supported, yet.\n        return [\n            \"\",\n            \"\"\n        ];\n    } else {\n        // We don't support any wide characters outside 1D400–1D7FF.\n        throw new ParseError(\"Unsupported character: \" + wideChar);\n    }\n};\n/* eslint no-console:0 */ /**\n * Looks up the given symbol in fontMetrics, after applying any symbol\n * replacements defined in symbol.js\n */ var lookupSymbol = function lookupSymbol(value, fontName, mode) {\n    // Replace the value with its replaced value from symbol.js\n    if (symbols[mode][value] && symbols[mode][value].replace) {\n        value = symbols[mode][value].replace;\n    }\n    return {\n        value: value,\n        metrics: getCharacterMetrics(value, fontName, mode)\n    };\n};\n/**\n * Makes a symbolNode after translation via the list of symbols in symbols.js.\n * Correctly pulls out metrics for the character, and optionally takes a list of\n * classes to be attached to the node.\n *\n * TODO: make argument order closer to makeSpan\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n * TODO(#953): Make `options` mandatory and always pass it in.\n */ var makeSymbol = function makeSymbol(value, fontName, mode, options, classes) {\n    var lookup = lookupSymbol(value, fontName, mode);\n    var metrics = lookup.metrics;\n    value = lookup.value;\n    var symbolNode;\n    if (metrics) {\n        var italic = metrics.italic;\n        if (mode === \"text\" || options && options.font === \"mathit\") {\n            italic = 0;\n        }\n        symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);\n    } else {\n        // TODO(emily): Figure out a good way to only print this in development\n        typeof console !== \"undefined\" && console.warn(\"No character metrics \" + (\"for '\" + value + \"' in style '\" + fontName + \"' and mode '\" + mode + \"'\"));\n        symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes);\n    }\n    if (options) {\n        symbolNode.maxFontSize = options.sizeMultiplier;\n        if (options.style.isTight()) {\n            symbolNode.classes.push(\"mtight\");\n        }\n        var color = options.getColor();\n        if (color) {\n            symbolNode.style.color = color;\n        }\n    }\n    return symbolNode;\n};\n/**\n * Makes a symbol in Main-Regular or AMS-Regular.\n * Used for rel, bin, open, close, inner, and punct.\n */ var mathsym = function mathsym(value, mode, options, classes) {\n    if (classes === void 0) {\n        classes = [];\n    }\n    // Decide what font to render the symbol in by its entry in the symbols\n    // table.\n    // Have a special case for when the value = \\ because the \\ is used as a\n    // textord in unsupported command errors but cannot be parsed as a regular\n    // text ordinal and is therefore not present as a symbol in the symbols\n    // table for text, as well as a special case for boldsymbol because it\n    // can be used for bold + and -\n    if (options.font === \"boldsymbol\" && lookupSymbol(value, \"Main-Bold\", mode).metrics) {\n        return makeSymbol(value, \"Main-Bold\", mode, options, classes.concat([\n            \"mathbf\"\n        ]));\n    } else if (value === \"\\\\\" || symbols[mode][value].font === \"main\") {\n        return makeSymbol(value, \"Main-Regular\", mode, options, classes);\n    } else {\n        return makeSymbol(value, \"AMS-Regular\", mode, options, classes.concat([\n            \"amsrm\"\n        ]));\n    }\n};\n/**\n * Determines which of the two font names (Main-Bold and Math-BoldItalic) and\n * corresponding style tags (mathbf or boldsymbol) to use for font \"boldsymbol\",\n * depending on the symbol.  Use this function instead of fontMap for font\n * \"boldsymbol\".\n */ var boldsymbol = function boldsymbol(value, mode, options, classes, type) {\n    if (type !== \"textord\" && lookupSymbol(value, \"Math-BoldItalic\", mode).metrics) {\n        return {\n            fontName: \"Math-BoldItalic\",\n            fontClass: \"boldsymbol\"\n        };\n    } else {\n        // Some glyphs do not exist in Math-BoldItalic so we need to use\n        // Main-Bold instead.\n        return {\n            fontName: \"Main-Bold\",\n            fontClass: \"mathbf\"\n        };\n    }\n};\n/**\n * Makes either a mathord or textord in the correct font and color.\n */ var makeOrd = function makeOrd(group, options, type) {\n    var mode = group.mode;\n    var text = group.text;\n    var classes = [\n        \"mord\"\n    ]; // Math mode or Old font (i.e. \\rm)\n    var isFont = mode === \"math\" || mode === \"text\" && options.font;\n    var fontOrFamily = isFont ? options.font : options.fontFamily;\n    if (text.charCodeAt(0) === 0xD835) {\n        // surrogate pairs get special treatment\n        var [wideFontName, wideFontClass] = wideCharacterFont(text, mode);\n        return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass));\n    } else if (fontOrFamily) {\n        var fontName;\n        var fontClasses;\n        if (fontOrFamily === \"boldsymbol\") {\n            var fontData = boldsymbol(text, mode, options, classes, type);\n            fontName = fontData.fontName;\n            fontClasses = [\n                fontData.fontClass\n            ];\n        } else if (isFont) {\n            fontName = fontMap[fontOrFamily].fontName;\n            fontClasses = [\n                fontOrFamily\n            ];\n        } else {\n            fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape);\n            fontClasses = [\n                fontOrFamily,\n                options.fontWeight,\n                options.fontShape\n            ];\n        }\n        if (lookupSymbol(text, fontName, mode).metrics) {\n            return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses));\n        } else if (ligatures.hasOwnProperty(text) && fontName.slice(0, 10) === \"Typewriter\") {\n            // Deconstruct ligatures in monospace fonts (\\texttt, \\tt).\n            var parts = [];\n            for(var i = 0; i < text.length; i++){\n                parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses)));\n            }\n            return makeFragment(parts);\n        }\n    } // Makes a symbol in the default font for mathords and textords.\n    if (type === \"mathord\") {\n        return makeSymbol(text, \"Math-Italic\", mode, options, classes.concat([\n            \"mathnormal\"\n        ]));\n    } else if (type === \"textord\") {\n        var font = symbols[mode][text] && symbols[mode][text].font;\n        if (font === \"ams\") {\n            var _fontName = retrieveTextFontName(\"amsrm\", options.fontWeight, options.fontShape);\n            return makeSymbol(text, _fontName, mode, options, classes.concat(\"amsrm\", options.fontWeight, options.fontShape));\n        } else if (font === \"main\" || !font) {\n            var _fontName2 = retrieveTextFontName(\"textrm\", options.fontWeight, options.fontShape);\n            return makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape));\n        } else {\n            // fonts added by plugins\n            var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class\n            return makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape));\n        }\n    } else {\n        throw new Error(\"unexpected type: \" + type + \" in makeOrd\");\n    }\n};\n/**\n * Returns true if subsequent symbolNodes have the same classes, skew, maxFont,\n * and styles.\n */ var canCombine = (prev, next)=>{\n    if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) {\n        return false;\n    } // If prev and next both are just \"mbin\"s or \"mord\"s we don't combine them\n    // so that the proper spacing can be preserved.\n    if (prev.classes.length === 1) {\n        var cls = prev.classes[0];\n        if (cls === \"mbin\" || cls === \"mord\") {\n            return false;\n        }\n    }\n    for(var style in prev.style){\n        if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {\n            return false;\n        }\n    }\n    for(var _style in next.style){\n        if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) {\n            return false;\n        }\n    }\n    return true;\n};\n/**\n * Combine consecutive domTree.symbolNodes into a single symbolNode.\n * Note: this function mutates the argument.\n */ var tryCombineChars = (chars)=>{\n    for(var i = 0; i < chars.length - 1; i++){\n        var prev = chars[i];\n        var next = chars[i + 1];\n        if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) {\n            prev.text += next.text;\n            prev.height = Math.max(prev.height, next.height);\n            prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use\n            // it to add padding to the right of the span created from\n            // the combined characters.\n            prev.italic = next.italic;\n            chars.splice(i + 1, 1);\n            i--;\n        }\n    }\n    return chars;\n};\n/**\n * Calculate the height, depth, and maxFontSize of an element based on its\n * children.\n */ var sizeElementFromChildren = function sizeElementFromChildren(elem) {\n    var height = 0;\n    var depth = 0;\n    var maxFontSize = 0;\n    for(var i = 0; i < elem.children.length; i++){\n        var child = elem.children[i];\n        if (child.height > height) {\n            height = child.height;\n        }\n        if (child.depth > depth) {\n            depth = child.depth;\n        }\n        if (child.maxFontSize > maxFontSize) {\n            maxFontSize = child.maxFontSize;\n        }\n    }\n    elem.height = height;\n    elem.depth = depth;\n    elem.maxFontSize = maxFontSize;\n};\n/**\n * Makes a span with the given list of classes, list of children, and options.\n *\n * TODO(#953): Ensure that `options` is always provided (currently some call\n * sites don't pass it) and make the type below mandatory.\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n */ var makeSpan$2 = function makeSpan(classes, children, options, style) {\n    var span = new Span(classes, children, options, style);\n    sizeElementFromChildren(span);\n    return span;\n}; // SVG one is simpler -- doesn't require height, depth, max-font setting.\n// This is also a separate method for typesafety.\nvar makeSvgSpan = (classes, children, options, style)=>new Span(classes, children, options, style);\nvar makeLineSpan = function makeLineSpan(className, options, thickness) {\n    var line = makeSpan$2([\n        className\n    ], [], options);\n    line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n    line.style.borderBottomWidth = makeEm(line.height);\n    line.maxFontSize = 1.0;\n    return line;\n};\n/**\n * Makes an anchor with the given href, list of classes, list of children,\n * and options.\n */ var makeAnchor = function makeAnchor(href, classes, children, options) {\n    var anchor = new Anchor(href, classes, children, options);\n    sizeElementFromChildren(anchor);\n    return anchor;\n};\n/**\n * Makes a document fragment with the given list of children.\n */ var makeFragment = function makeFragment(children) {\n    var fragment = new DocumentFragment(children);\n    sizeElementFromChildren(fragment);\n    return fragment;\n};\n/**\n * Wraps group in a span if it's a document fragment, allowing to apply classes\n * and styles\n */ var wrapFragment = function wrapFragment(group, options) {\n    if (group instanceof DocumentFragment) {\n        return makeSpan$2([], [\n            group\n        ], options);\n    }\n    return group;\n}; // These are exact object types to catch typos in the names of the optional fields.\n// Computes the updated `children` list and the overall depth.\n//\n// This helper function for makeVList makes it easier to enforce type safety by\n// allowing early exits (returns) in the logic.\nvar getVListChildrenAndDepth = function getVListChildrenAndDepth(params) {\n    if (params.positionType === \"individualShift\") {\n        var oldChildren = params.children;\n        var children = [\n            oldChildren[0]\n        ]; // Add in kerns to the list of params.children to get each element to be\n        // shifted to the correct specified shift\n        var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth;\n        var currPos = _depth;\n        for(var i = 1; i < oldChildren.length; i++){\n            var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;\n            var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);\n            currPos = currPos + diff;\n            children.push({\n                type: \"kern\",\n                size\n            });\n            children.push(oldChildren[i]);\n        }\n        return {\n            children,\n            depth: _depth\n        };\n    }\n    var depth;\n    if (params.positionType === \"top\") {\n        // We always start at the bottom, so calculate the bottom by adding up\n        // all the sizes\n        var bottom = params.positionData;\n        for(var _i = 0; _i < params.children.length; _i++){\n            var child = params.children[_i];\n            bottom -= child.type === \"kern\" ? child.size : child.elem.height + child.elem.depth;\n        }\n        depth = bottom;\n    } else if (params.positionType === \"bottom\") {\n        depth = -params.positionData;\n    } else {\n        var firstChild = params.children[0];\n        if (firstChild.type !== \"elem\") {\n            throw new Error('First child must have type \"elem\".');\n        }\n        if (params.positionType === \"shift\") {\n            depth = -firstChild.elem.depth - params.positionData;\n        } else if (params.positionType === \"firstBaseline\") {\n            depth = -firstChild.elem.depth;\n        } else {\n            throw new Error(\"Invalid positionType \" + params.positionType + \".\");\n        }\n    }\n    return {\n        children: params.children,\n        depth\n    };\n};\n/**\n * Makes a vertical list by stacking elements and kerns on top of each other.\n * Allows for many different ways of specifying the positioning method.\n *\n * See VListParam documentation above.\n */ var makeVList = function makeVList(params, options) {\n    var { children, depth } = getVListChildrenAndDepth(params); // Create a strut that is taller than any list item. The strut is added to\n    // each item, where it will determine the item's baseline. Since it has\n    // `overflow:hidden`, the strut's top edge will sit on the item's line box's\n    // top edge and the strut's bottom edge will sit on the item's baseline,\n    // with no additional line-height spacing. This allows the item baseline to\n    // be positioned precisely without worrying about font ascent and\n    // line-height.\n    var pstrutSize = 0;\n    for(var i = 0; i < children.length; i++){\n        var child = children[i];\n        if (child.type === \"elem\") {\n            var elem = child.elem;\n            pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);\n        }\n    }\n    pstrutSize += 2;\n    var pstrut = makeSpan$2([\n        \"pstrut\"\n    ], []);\n    pstrut.style.height = makeEm(pstrutSize); // Create a new list of actual children at the correct offsets\n    var realChildren = [];\n    var minPos = depth;\n    var maxPos = depth;\n    var currPos = depth;\n    for(var _i2 = 0; _i2 < children.length; _i2++){\n        var _child = children[_i2];\n        if (_child.type === \"kern\") {\n            currPos += _child.size;\n        } else {\n            var _elem = _child.elem;\n            var classes = _child.wrapperClasses || [];\n            var style = _child.wrapperStyle || {};\n            var childWrap = makeSpan$2(classes, [\n                pstrut,\n                _elem\n            ], undefined, style);\n            childWrap.style.top = makeEm(-pstrutSize - currPos - _elem.depth);\n            if (_child.marginLeft) {\n                childWrap.style.marginLeft = _child.marginLeft;\n            }\n            if (_child.marginRight) {\n                childWrap.style.marginRight = _child.marginRight;\n            }\n            realChildren.push(childWrap);\n            currPos += _elem.height + _elem.depth;\n        }\n        minPos = Math.min(minPos, currPos);\n        maxPos = Math.max(maxPos, currPos);\n    } // The vlist contents go in a table-cell with `vertical-align:bottom`.\n    // This cell's bottom edge will determine the containing table's baseline\n    // without overly expanding the containing line-box.\n    var vlist = makeSpan$2([\n        \"vlist\"\n    ], realChildren);\n    vlist.style.height = makeEm(maxPos); // A second row is used if necessary to represent the vlist's depth.\n    var rows;\n    if (minPos < 0) {\n        // We will define depth in an empty span with display: table-cell.\n        // It should render with the height that we define. But Chrome, in\n        // contenteditable mode only, treats that span as if it contains some\n        // text content. And that min-height over-rides our desired height.\n        // So we put another empty span inside the depth strut span.\n        var emptySpan = makeSpan$2([], []);\n        var depthStrut = makeSpan$2([\n            \"vlist\"\n        ], [\n            emptySpan\n        ]);\n        depthStrut.style.height = makeEm(-minPos); // Safari wants the first row to have inline content; otherwise it\n        // puts the bottom of the *second* row on the baseline.\n        var topStrut = makeSpan$2([\n            \"vlist-s\"\n        ], [\n            new SymbolNode(\"\")\n        ]);\n        rows = [\n            makeSpan$2([\n                \"vlist-r\"\n            ], [\n                vlist,\n                topStrut\n            ]),\n            makeSpan$2([\n                \"vlist-r\"\n            ], [\n                depthStrut\n            ])\n        ];\n    } else {\n        rows = [\n            makeSpan$2([\n                \"vlist-r\"\n            ], [\n                vlist\n            ])\n        ];\n    }\n    var vtable = makeSpan$2([\n        \"vlist-t\"\n    ], rows);\n    if (rows.length === 2) {\n        vtable.classes.push(\"vlist-t2\");\n    }\n    vtable.height = maxPos;\n    vtable.depth = -minPos;\n    return vtable;\n}; // Glue is a concept from TeX which is a flexible space between elements in\n// either a vertical or horizontal list. In KaTeX, at least for now, it's\n// static space between elements in a horizontal layout.\nvar makeGlue = (measurement, options)=>{\n    // Make an empty span for the space\n    var rule = makeSpan$2([\n        \"mspace\"\n    ], [], options);\n    var size = calculateSize(measurement, options);\n    rule.style.marginRight = makeEm(size);\n    return rule;\n}; // Takes font options, and returns the appropriate fontLookup name\nvar retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) {\n    var baseFontName = \"\";\n    switch(fontFamily){\n        case \"amsrm\":\n            baseFontName = \"AMS\";\n            break;\n        case \"textrm\":\n            baseFontName = \"Main\";\n            break;\n        case \"textsf\":\n            baseFontName = \"SansSerif\";\n            break;\n        case \"texttt\":\n            baseFontName = \"Typewriter\";\n            break;\n        default:\n            baseFontName = fontFamily;\n    }\n    var fontStylesName;\n    if (fontWeight === \"textbf\" && fontShape === \"textit\") {\n        fontStylesName = \"BoldItalic\";\n    } else if (fontWeight === \"textbf\") {\n        fontStylesName = \"Bold\";\n    } else if (fontWeight === \"textit\") {\n        fontStylesName = \"Italic\";\n    } else {\n        fontStylesName = \"Regular\";\n    }\n    return baseFontName + \"-\" + fontStylesName;\n};\n/**\n * Maps TeX font commands to objects containing:\n * - variant: string used for \"mathvariant\" attribute in buildMathML.js\n * - fontName: the \"style\" parameter to fontMetrics.getCharacterMetrics\n */ // A map between tex font commands an MathML mathvariant attribute values\nvar fontMap = {\n    // styles\n    \"mathbf\": {\n        variant: \"bold\",\n        fontName: \"Main-Bold\"\n    },\n    \"mathrm\": {\n        variant: \"normal\",\n        fontName: \"Main-Regular\"\n    },\n    \"textit\": {\n        variant: \"italic\",\n        fontName: \"Main-Italic\"\n    },\n    \"mathit\": {\n        variant: \"italic\",\n        fontName: \"Main-Italic\"\n    },\n    \"mathnormal\": {\n        variant: \"italic\",\n        fontName: \"Math-Italic\"\n    },\n    // \"boldsymbol\" is missing because they require the use of multiple fonts:\n    // Math-BoldItalic and Main-Bold.  This is handled by a special case in\n    // makeOrd which ends up calling boldsymbol.\n    // families\n    \"mathbb\": {\n        variant: \"double-struck\",\n        fontName: \"AMS-Regular\"\n    },\n    \"mathcal\": {\n        variant: \"script\",\n        fontName: \"Caligraphic-Regular\"\n    },\n    \"mathfrak\": {\n        variant: \"fraktur\",\n        fontName: \"Fraktur-Regular\"\n    },\n    \"mathscr\": {\n        variant: \"script\",\n        fontName: \"Script-Regular\"\n    },\n    \"mathsf\": {\n        variant: \"sans-serif\",\n        fontName: \"SansSerif-Regular\"\n    },\n    \"mathtt\": {\n        variant: \"monospace\",\n        fontName: \"Typewriter-Regular\"\n    }\n};\nvar svgData = {\n    //   path, width, height\n    vec: [\n        \"vec\",\n        0.471,\n        0.714\n    ],\n    // values from the font glyph\n    oiintSize1: [\n        \"oiintSize1\",\n        0.957,\n        0.499\n    ],\n    // oval to overlay the integrand\n    oiintSize2: [\n        \"oiintSize2\",\n        1.472,\n        0.659\n    ],\n    oiiintSize1: [\n        \"oiiintSize1\",\n        1.304,\n        0.499\n    ],\n    oiiintSize2: [\n        \"oiiintSize2\",\n        1.98,\n        0.659\n    ]\n};\nvar staticSvg = function staticSvg(value, options) {\n    // Create a span with inline SVG for the element.\n    var [pathName, width, height] = svgData[value];\n    var path = new PathNode(pathName);\n    var svgNode = new SvgNode([\n        path\n    ], {\n        \"width\": makeEm(width),\n        \"height\": makeEm(height),\n        // Override CSS rule `.katex svg { width: 100% }`\n        \"style\": \"width:\" + makeEm(width),\n        \"viewBox\": \"0 0 \" + 1000 * width + \" \" + 1000 * height,\n        \"preserveAspectRatio\": \"xMinYMin\"\n    });\n    var span = makeSvgSpan([\n        \"overlay\"\n    ], [\n        svgNode\n    ], options);\n    span.height = height;\n    span.style.height = makeEm(height);\n    span.style.width = makeEm(width);\n    return span;\n};\nvar buildCommon = {\n    fontMap,\n    makeSymbol,\n    mathsym,\n    makeSpan: makeSpan$2,\n    makeSvgSpan,\n    makeLineSpan,\n    makeAnchor,\n    makeFragment,\n    wrapFragment,\n    makeVList,\n    makeOrd,\n    makeGlue,\n    staticSvg,\n    svgData,\n    tryCombineChars\n};\n/**\n * Describes spaces between different classes of atoms.\n */ var thinspace = {\n    number: 3,\n    unit: \"mu\"\n};\nvar mediumspace = {\n    number: 4,\n    unit: \"mu\"\n};\nvar thickspace = {\n    number: 5,\n    unit: \"mu\"\n}; // Making the type below exact with all optional fields doesn't work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n// Spacing relationships for display and text styles\nvar spacings = {\n    mord: {\n        mop: thinspace,\n        mbin: mediumspace,\n        mrel: thickspace,\n        minner: thinspace\n    },\n    mop: {\n        mord: thinspace,\n        mop: thinspace,\n        mrel: thickspace,\n        minner: thinspace\n    },\n    mbin: {\n        mord: mediumspace,\n        mop: mediumspace,\n        mopen: mediumspace,\n        minner: mediumspace\n    },\n    mrel: {\n        mord: thickspace,\n        mop: thickspace,\n        mopen: thickspace,\n        minner: thickspace\n    },\n    mopen: {},\n    mclose: {\n        mop: thinspace,\n        mbin: mediumspace,\n        mrel: thickspace,\n        minner: thinspace\n    },\n    mpunct: {\n        mord: thinspace,\n        mop: thinspace,\n        mrel: thickspace,\n        mopen: thinspace,\n        mclose: thinspace,\n        mpunct: thinspace,\n        minner: thinspace\n    },\n    minner: {\n        mord: thinspace,\n        mop: thinspace,\n        mbin: mediumspace,\n        mrel: thickspace,\n        mopen: thinspace,\n        mpunct: thinspace,\n        minner: thinspace\n    }\n}; // Spacing relationships for script and scriptscript styles\nvar tightSpacings = {\n    mord: {\n        mop: thinspace\n    },\n    mop: {\n        mord: thinspace,\n        mop: thinspace\n    },\n    mbin: {},\n    mrel: {},\n    mopen: {},\n    mclose: {\n        mop: thinspace\n    },\n    mpunct: {},\n    minner: {\n        mop: thinspace\n    }\n};\n/** Context provided to function handlers for error messages. */ // Note: reverse the order of the return type union will cause a flow error.\n// See https://github.com/facebook/flow/issues/3663.\n// More general version of `HtmlBuilder` for nodes (e.g. \\sum, accent types)\n// whose presence impacts super/subscripting. In this case, ParseNode<\"supsub\">\n// delegates its HTML building to the HtmlBuilder corresponding to these nodes.\n/**\n * Final function spec for use at parse time.\n * This is almost identical to `FunctionPropSpec`, except it\n * 1. includes the function handler, and\n * 2. requires all arguments except argTypes.\n * It is generated by `defineFunction()` below.\n */ /**\n * All registered functions.\n * `functions.js` just exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary.\n */ var _functions = {};\n/**\n * All HTML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */ var _htmlGroupBuilders = {};\n/**\n * All MathML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */ var _mathmlGroupBuilders = {};\nfunction defineFunction(_ref) {\n    var { type, names, props, handler, htmlBuilder, mathmlBuilder } = _ref;\n    // Set default values of functions\n    var data = {\n        type,\n        numArgs: props.numArgs,\n        argTypes: props.argTypes,\n        allowedInArgument: !!props.allowedInArgument,\n        allowedInText: !!props.allowedInText,\n        allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,\n        numOptionalArgs: props.numOptionalArgs || 0,\n        infix: !!props.infix,\n        primitive: !!props.primitive,\n        handler: handler\n    };\n    for(var i = 0; i < names.length; ++i){\n        _functions[names[i]] = data;\n    }\n    if (type) {\n        if (htmlBuilder) {\n            _htmlGroupBuilders[type] = htmlBuilder;\n        }\n        if (mathmlBuilder) {\n            _mathmlGroupBuilders[type] = mathmlBuilder;\n        }\n    }\n}\n/**\n * Use this to register only the HTML and MathML builders for a function (e.g.\n * if the function's ParseNode is generated in Parser.js rather than via a\n * stand-alone handler provided to `defineFunction`).\n */ function defineFunctionBuilders(_ref2) {\n    var { type, htmlBuilder, mathmlBuilder } = _ref2;\n    defineFunction({\n        type,\n        names: [],\n        props: {\n            numArgs: 0\n        },\n        handler () {\n            throw new Error(\"Should never be called.\");\n        },\n        htmlBuilder,\n        mathmlBuilder\n    });\n}\nvar normalizeArgument = function normalizeArgument(arg) {\n    return arg.type === \"ordgroup\" && arg.body.length === 1 ? arg.body[0] : arg;\n}; // Since the corresponding buildHTML/buildMathML function expects a\n// list of elements, we normalize for different kinds of arguments\nvar ordargument = function ordargument(arg) {\n    return arg.type === \"ordgroup\" ? arg.body : [\n        arg\n    ];\n};\n/**\n * This file does the main work of building a domTree structure from a parse\n * tree. The entry point is the `buildHTML` function, which takes a parse tree.\n * Then, the buildExpression, buildGroup, and various groupBuilders functions\n * are called, to produce a final HTML tree.\n */ var makeSpan$1 = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)\n// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,\n// and the text before Rule 19.\nvar binLeftCanceller = [\n    \"leftmost\",\n    \"mbin\",\n    \"mopen\",\n    \"mrel\",\n    \"mop\",\n    \"mpunct\"\n];\nvar binRightCanceller = [\n    \"rightmost\",\n    \"mrel\",\n    \"mclose\",\n    \"mpunct\"\n];\nvar styleMap$1 = {\n    \"display\": Style$1.DISPLAY,\n    \"text\": Style$1.TEXT,\n    \"script\": Style$1.SCRIPT,\n    \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\nvar DomEnum = {\n    mord: \"mord\",\n    mop: \"mop\",\n    mbin: \"mbin\",\n    mrel: \"mrel\",\n    mopen: \"mopen\",\n    mclose: \"mclose\",\n    mpunct: \"mpunct\",\n    minner: \"minner\"\n};\n/**\n * Take a list of nodes, build them in order, and return a list of the built\n * nodes. documentFragments are flattened into their contents, so the\n * returned list contains no fragments. `isRealGroup` is true if `expression`\n * is a real group (no atoms will be added on either side), as opposed to\n * a partial group (e.g. one created by \\color). `surrounding` is an array\n * consisting type of nodes that will be added to the left and right.\n */ var buildExpression$1 = function buildExpression(expression, options, isRealGroup, surrounding) {\n    if (surrounding === void 0) {\n        surrounding = [\n            null,\n            null\n        ];\n    }\n    // Parse expressions into `groups`.\n    var groups = [];\n    for(var i = 0; i < expression.length; i++){\n        var output = buildGroup$1(expression[i], options);\n        if (output instanceof DocumentFragment) {\n            var children = output.children;\n            groups.push(...children);\n        } else {\n            groups.push(output);\n        }\n    } // Combine consecutive domTree.symbolNodes into a single symbolNode.\n    buildCommon.tryCombineChars(groups); // If `expression` is a partial group, let the parent handle spacings\n    // to avoid processing groups multiple times.\n    if (!isRealGroup) {\n        return groups;\n    }\n    var glueOptions = options;\n    if (expression.length === 1) {\n        var node = expression[0];\n        if (node.type === \"sizing\") {\n            glueOptions = options.havingSize(node.size);\n        } else if (node.type === \"styling\") {\n            glueOptions = options.havingStyle(styleMap$1[node.style]);\n        }\n    } // Dummy spans for determining spacings between surrounding atoms.\n    // If `expression` has no atoms on the left or right, class \"leftmost\"\n    // or \"rightmost\", respectively, is used to indicate it.\n    var dummyPrev = makeSpan$1([\n        surrounding[0] || \"leftmost\"\n    ], [], options);\n    var dummyNext = makeSpan$1([\n        surrounding[1] || \"rightmost\"\n    ], [], options); // TODO: These code assumes that a node's math class is the first element\n    // of its `classes` array. A later cleanup should ensure this, for\n    // instance by changing the signature of `makeSpan`.\n    // Before determining what spaces to insert, perform bin cancellation.\n    // Binary operators change to ordinary symbols in some contexts.\n    var isRoot = isRealGroup === \"root\";\n    traverseNonSpaceNodes(groups, (node, prev)=>{\n        var prevType = prev.classes[0];\n        var type = node.classes[0];\n        if (prevType === \"mbin\" && utils.contains(binRightCanceller, type)) {\n            prev.classes[0] = \"mord\";\n        } else if (type === \"mbin\" && utils.contains(binLeftCanceller, prevType)) {\n            node.classes[0] = \"mord\";\n        }\n    }, {\n        node: dummyPrev\n    }, dummyNext, isRoot);\n    traverseNonSpaceNodes(groups, (node, prev)=>{\n        var prevType = getTypeOfDomTree(prev);\n        var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style.\n        var space = prevType && type ? node.hasClass(\"mtight\") ? tightSpacings[prevType][type] : spacings[prevType][type] : null;\n        if (space) {\n            // Insert glue (spacing) after the `prev`.\n            return buildCommon.makeGlue(space, glueOptions);\n        }\n    }, {\n        node: dummyPrev\n    }, dummyNext, isRoot);\n    return groups;\n}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and\n// previous node as arguments, optionally returning a node to insert after the\n// previous node. `prev` is an object with the previous node and `insertAfter`\n// function to insert after it. `next` is a node that will be added to the right.\n// Used for bin cancellation and inserting spacings.\nvar traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) {\n    if (next) {\n        // temporarily append the right node, if exists\n        nodes.push(next);\n    }\n    var i = 0;\n    for(; i < nodes.length; i++){\n        var node = nodes[i];\n        var partialGroup = checkPartialGroup(node);\n        if (partialGroup) {\n            // Recursive DFS\n            // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array\n            traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot);\n            continue;\n        } // Ignore explicit spaces (e.g., \\;, \\,) when determining what implicit\n        // spacing should go between atoms of different classes\n        var nonspace = !node.hasClass(\"mspace\");\n        if (nonspace) {\n            var result = callback(node, prev.node);\n            if (result) {\n                if (prev.insertAfter) {\n                    prev.insertAfter(result);\n                } else {\n                    // insert at front\n                    nodes.unshift(result);\n                    i++;\n                }\n            }\n        }\n        if (nonspace) {\n            prev.node = node;\n        } else if (isRoot && node.hasClass(\"newline\")) {\n            prev.node = makeSpan$1([\n                \"leftmost\"\n            ]); // treat like beginning of line\n        }\n        prev.insertAfter = ((index)=>(n)=>{\n                nodes.splice(index + 1, 0, n);\n                i++;\n            })(i);\n    }\n    if (next) {\n        nodes.pop();\n    }\n}; // Check if given node is a partial group, i.e., does not affect spacing around.\nvar checkPartialGroup = function checkPartialGroup(node) {\n    if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass(\"enclosing\")) {\n        return node;\n    }\n    return null;\n}; // Return the outermost node of a domTree.\nvar getOutermostNode = function getOutermostNode(node, side) {\n    var partialGroup = checkPartialGroup(node);\n    if (partialGroup) {\n        var children = partialGroup.children;\n        if (children.length) {\n            if (side === \"right\") {\n                return getOutermostNode(children[children.length - 1], \"right\");\n            } else if (side === \"left\") {\n                return getOutermostNode(children[0], \"left\");\n            }\n        }\n    }\n    return node;\n}; // Return math atom class (mclass) of a domTree.\n// If `side` is given, it will get the type of the outermost node at given side.\nvar getTypeOfDomTree = function getTypeOfDomTree(node, side) {\n    if (!node) {\n        return null;\n    }\n    if (side) {\n        node = getOutermostNode(node, side);\n    } // This makes a lot of assumptions as to where the type of atom\n    // appears.  We should do a better job of enforcing this.\n    return DomEnum[node.classes[0]] || null;\n};\nvar makeNullDelimiter = function makeNullDelimiter(options, classes) {\n    var moreClasses = [\n        \"nulldelimiter\"\n    ].concat(options.baseSizingClasses());\n    return makeSpan$1(classes.concat(moreClasses));\n};\n/**\n * buildGroup is the function that takes a group and calls the correct groupType\n * function for it. It also handles the interaction of size and style changes\n * between parents and children.\n */ var buildGroup$1 = function buildGroup(group, options, baseOptions) {\n    if (!group) {\n        return makeSpan$1();\n    }\n    if (_htmlGroupBuilders[group.type]) {\n        // Call the groupBuilders function\n        // $FlowFixMe\n        var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account\n        // for that size difference.\n        if (baseOptions && options.size !== baseOptions.size) {\n            groupNode = makeSpan$1(options.sizingClasses(baseOptions), [\n                groupNode\n            ], options);\n            var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;\n            groupNode.height *= multiplier;\n            groupNode.depth *= multiplier;\n        }\n        return groupNode;\n    } else {\n        throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n    }\n};\n/**\n * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`)\n * into an unbreakable HTML node of class .base, with proper struts to\n * guarantee correct vertical extent.  `buildHTML` calls this repeatedly to\n * make up the entire expression as a sequence of unbreakable units.\n */ function buildHTMLUnbreakable(children, options) {\n    // Compute height and depth of this chunk.\n    var body = makeSpan$1([\n        \"base\"\n    ], children, options); // Add strut, which ensures that the top of the HTML element falls at\n    // the height of the expression, and the bottom of the HTML element\n    // falls at the depth of the expression.\n    var strut = makeSpan$1([\n        \"strut\"\n    ]);\n    strut.style.height = makeEm(body.height + body.depth);\n    if (body.depth) {\n        strut.style.verticalAlign = makeEm(-body.depth);\n    }\n    body.children.unshift(strut);\n    return body;\n}\n/**\n * Take an entire parse tree, and build it into an appropriate set of HTML\n * nodes.\n */ function buildHTML(tree, options) {\n    // Strip off outer tag wrapper for processing below.\n    var tag = null;\n    if (tree.length === 1 && tree[0].type === \"tag\") {\n        tag = tree[0].tag;\n        tree = tree[0].body;\n    } // Build the expression contained in the tree\n    var expression = buildExpression$1(tree, options, \"root\");\n    var eqnNum;\n    if (expression.length === 2 && expression[1].hasClass(\"tag\")) {\n        // An environment with automatic equation numbers, e.g. {gather}.\n        eqnNum = expression.pop();\n    }\n    var children = []; // Create one base node for each chunk between potential line breaks.\n    // The TeXBook [p.173] says \"A formula will be broken only after a\n    // relation symbol like $=$ or $<$ or $\\rightarrow$, or after a binary\n    // operation symbol like $+$ or $-$ or $\\times$, where the relation or\n    // binary operation is on the ``outer level'' of the formula (i.e., not\n    // enclosed in {...} and not part of an \\over construction).\"\n    var parts = [];\n    for(var i = 0; i < expression.length; i++){\n        parts.push(expression[i]);\n        if (expression[i].hasClass(\"mbin\") || expression[i].hasClass(\"mrel\") || expression[i].hasClass(\"allowbreak\")) {\n            // Put any post-operator glue on same line as operator.\n            // Watch for \\nobreak along the way, and stop at \\newline.\n            var nobreak = false;\n            while(i < expression.length - 1 && expression[i + 1].hasClass(\"mspace\") && !expression[i + 1].hasClass(\"newline\")){\n                i++;\n                parts.push(expression[i]);\n                if (expression[i].hasClass(\"nobreak\")) {\n                    nobreak = true;\n                }\n            } // Don't allow break if \\nobreak among the post-operator glue.\n            if (!nobreak) {\n                children.push(buildHTMLUnbreakable(parts, options));\n                parts = [];\n            }\n        } else if (expression[i].hasClass(\"newline\")) {\n            // Write the line except the newline\n            parts.pop();\n            if (parts.length > 0) {\n                children.push(buildHTMLUnbreakable(parts, options));\n                parts = [];\n            } // Put the newline at the top level\n            children.push(expression[i]);\n        }\n    }\n    if (parts.length > 0) {\n        children.push(buildHTMLUnbreakable(parts, options));\n    } // Now, if there was a tag, build it too and append it as a final child.\n    var tagChild;\n    if (tag) {\n        tagChild = buildHTMLUnbreakable(buildExpression$1(tag, options, true));\n        tagChild.classes = [\n            \"tag\"\n        ];\n        children.push(tagChild);\n    } else if (eqnNum) {\n        children.push(eqnNum);\n    }\n    var htmlNode = makeSpan$1([\n        \"katex-html\"\n    ], children);\n    htmlNode.setAttribute(\"aria-hidden\", \"true\"); // Adjust the strut of the tag to be the maximum height of all children\n    // (the height of the enclosing htmlNode) for proper vertical alignment.\n    if (tagChild) {\n        var strut = tagChild.children[0];\n        strut.style.height = makeEm(htmlNode.height + htmlNode.depth);\n        if (htmlNode.depth) {\n            strut.style.verticalAlign = makeEm(-htmlNode.depth);\n        }\n    }\n    return htmlNode;\n}\n/**\n * These objects store data about MathML nodes. This is the MathML equivalent\n * of the types in domTree.js. Since MathML handles its own rendering, and\n * since we're mainly using MathML to improve accessibility, we don't manage\n * any of the styling state that the plain DOM nodes do.\n *\n * The `toNode` and `toMarkup` functions work similarly to how they do in\n * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.\n */ function newDocumentFragment(children) {\n    return new DocumentFragment(children);\n}\n/**\n * This node represents a general purpose MathML node of any type. The\n * constructor requires the type of node to create (for example, `\"mo\"` or\n * `\"mspace\"`, corresponding to `<mo>` and `<mspace>` tags).\n */ class MathNode {\n    constructor(type, children, classes){\n        this.type = void 0;\n        this.attributes = void 0;\n        this.children = void 0;\n        this.classes = void 0;\n        this.type = type;\n        this.attributes = {};\n        this.children = children || [];\n        this.classes = classes || [];\n    }\n    /**\n   * Sets an attribute on a MathML node. MathML depends on attributes to convey a\n   * semantic content, so this is used heavily.\n   */ setAttribute(name, value) {\n        this.attributes[name] = value;\n    }\n    /**\n   * Gets an attribute on a MathML node.\n   */ getAttribute(name) {\n        return this.attributes[name];\n    }\n    /**\n   * Converts the math node into a MathML-namespaced DOM element.\n   */ toNode() {\n        var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", this.type);\n        for(var attr in this.attributes){\n            if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n                node.setAttribute(attr, this.attributes[attr]);\n            }\n        }\n        if (this.classes.length > 0) {\n            node.className = createClass(this.classes);\n        }\n        for(var i = 0; i < this.children.length; i++){\n            node.appendChild(this.children[i].toNode());\n        }\n        return node;\n    }\n    /**\n   * Converts the math node into an HTML markup string.\n   */ toMarkup() {\n        var markup = \"<\" + this.type; // Add the attributes\n        for(var attr in this.attributes){\n            if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n                markup += \" \" + attr + '=\"';\n                markup += utils.escape(this.attributes[attr]);\n                markup += '\"';\n            }\n        }\n        if (this.classes.length > 0) {\n            markup += ' class =\"' + utils.escape(createClass(this.classes)) + '\"';\n        }\n        markup += \">\";\n        for(var i = 0; i < this.children.length; i++){\n            markup += this.children[i].toMarkup();\n        }\n        markup += \"</\" + this.type + \">\";\n        return markup;\n    }\n    /**\n   * Converts the math node into a string, similar to innerText, but escaped.\n   */ toText() {\n        return this.children.map((child)=>child.toText()).join(\"\");\n    }\n}\n/**\n * This node represents a piece of text.\n */ class TextNode {\n    constructor(text){\n        this.text = void 0;\n        this.text = text;\n    }\n    /**\n   * Converts the text node into a DOM text node.\n   */ toNode() {\n        return document.createTextNode(this.text);\n    }\n    /**\n   * Converts the text node into escaped HTML markup\n   * (representing the text itself).\n   */ toMarkup() {\n        return utils.escape(this.toText());\n    }\n    /**\n   * Converts the text node into a string\n   * (representing the text itself).\n   */ toText() {\n        return this.text;\n    }\n}\n/**\n * This node represents a space, but may render as <mspace.../> or as text,\n * depending on the width.\n */ class SpaceNode {\n    /**\n   * Create a Space node with width given in CSS ems.\n   */ constructor(width){\n        this.width = void 0;\n        this.character = void 0;\n        this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html\n        // for a table of space-like characters.  We use Unicode\n        // representations instead of &LongNames; as it's not clear how to\n        // make the latter via document.createTextNode.\n        if (width >= 0.05555 && width <= 0.05556) {\n            this.character = \" \"; //  \n        } else if (width >= 0.1666 && width <= 0.1667) {\n            this.character = \" \"; //  \n        } else if (width >= 0.2222 && width <= 0.2223) {\n            this.character = \" \"; //  \n        } else if (width >= 0.2777 && width <= 0.2778) {\n            this.character = \"  \"; //   \n        } else if (width >= -0.05556 && width <= -0.05555) {\n            this.character = \" \"; // ​\n        } else if (width >= -0.1667 && width <= -0.1666) {\n            this.character = \" \"; // ​\n        } else if (width >= -0.2223 && width <= -0.2222) {\n            this.character = \" \"; // ​\n        } else if (width >= -0.2778 && width <= -0.2777) {\n            this.character = \" \"; // ​\n        } else {\n            this.character = null;\n        }\n    }\n    /**\n   * Converts the math node into a MathML-namespaced DOM element.\n   */ toNode() {\n        if (this.character) {\n            return document.createTextNode(this.character);\n        } else {\n            var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"mspace\");\n            node.setAttribute(\"width\", makeEm(this.width));\n            return node;\n        }\n    }\n    /**\n   * Converts the math node into an HTML markup string.\n   */ toMarkup() {\n        if (this.character) {\n            return \"<mtext>\" + this.character + \"</mtext>\";\n        } else {\n            return '<mspace width=\"' + makeEm(this.width) + '\"/>';\n        }\n    }\n    /**\n   * Converts the math node into a string, similar to innerText.\n   */ toText() {\n        if (this.character) {\n            return this.character;\n        } else {\n            return \" \";\n        }\n    }\n}\nvar mathMLTree = {\n    MathNode,\n    TextNode,\n    SpaceNode,\n    newDocumentFragment\n};\n/**\n * This file converts a parse tree into a corresponding MathML tree. The main\n * entry point is the `buildMathML` function, which takes a parse tree from the\n * parser.\n */ /**\n * Takes a symbol and converts it into a MathML text node after performing\n * optional replacement from symbols.js.\n */ var makeText = function makeText(text, mode, options) {\n    if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.slice(4, 6) === \"tt\" || options.font && options.font.slice(4, 6) === \"tt\"))) {\n        text = symbols[mode][text].replace;\n    }\n    return new mathMLTree.TextNode(text);\n};\n/**\n * Wrap the given array of nodes in an <mrow> node if needed, i.e.,\n * unless the array has length 1.  Always returns a single node.\n */ var makeRow = function makeRow(body) {\n    if (body.length === 1) {\n        return body[0];\n    } else {\n        return new mathMLTree.MathNode(\"mrow\", body);\n    }\n};\n/**\n * Returns the math variant as a string or null if none is required.\n */ var getVariant = function getVariant(group, options) {\n    // Handle \\text... font specifiers as best we can.\n    // MathML has a limited list of allowable mathvariant specifiers; see\n    // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt\n    if (options.fontFamily === \"texttt\") {\n        return \"monospace\";\n    } else if (options.fontFamily === \"textsf\") {\n        if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n            return \"sans-serif-bold-italic\";\n        } else if (options.fontShape === \"textit\") {\n            return \"sans-serif-italic\";\n        } else if (options.fontWeight === \"textbf\") {\n            return \"bold-sans-serif\";\n        } else {\n            return \"sans-serif\";\n        }\n    } else if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n        return \"bold-italic\";\n    } else if (options.fontShape === \"textit\") {\n        return \"italic\";\n    } else if (options.fontWeight === \"textbf\") {\n        return \"bold\";\n    }\n    var font = options.font;\n    if (!font || font === \"mathnormal\") {\n        return null;\n    }\n    var mode = group.mode;\n    if (font === \"mathit\") {\n        return \"italic\";\n    } else if (font === \"boldsymbol\") {\n        return group.type === \"textord\" ? \"bold\" : \"bold-italic\";\n    } else if (font === \"mathbf\") {\n        return \"bold\";\n    } else if (font === \"mathbb\") {\n        return \"double-struck\";\n    } else if (font === \"mathfrak\") {\n        return \"fraktur\";\n    } else if (font === \"mathscr\" || font === \"mathcal\") {\n        // MathML makes no distinction between script and calligraphic\n        return \"script\";\n    } else if (font === \"mathsf\") {\n        return \"sans-serif\";\n    } else if (font === \"mathtt\") {\n        return \"monospace\";\n    }\n    var text = group.text;\n    if (utils.contains([\n        \"\\\\imath\",\n        \"\\\\jmath\"\n    ], text)) {\n        return null;\n    }\n    if (symbols[mode][text] && symbols[mode][text].replace) {\n        text = symbols[mode][text].replace;\n    }\n    var fontName = buildCommon.fontMap[font].fontName;\n    if (getCharacterMetrics(text, fontName, mode)) {\n        return buildCommon.fontMap[font].variant;\n    }\n    return null;\n};\n/**\n * Takes a list of nodes, builds them, and returns a list of the generated\n * MathML nodes.  Also combine consecutive <mtext> outputs into a single\n * <mtext> tag.\n */ var buildExpression = function buildExpression(expression, options, isOrdgroup) {\n    if (expression.length === 1) {\n        var group = buildGroup(expression[0], options);\n        if (isOrdgroup && group instanceof MathNode && group.type === \"mo\") {\n            // When TeX writers want to suppress spacing on an operator,\n            // they often put the operator by itself inside braces.\n            group.setAttribute(\"lspace\", \"0em\");\n            group.setAttribute(\"rspace\", \"0em\");\n        }\n        return [\n            group\n        ];\n    }\n    var groups = [];\n    var lastGroup;\n    for(var i = 0; i < expression.length; i++){\n        var _group = buildGroup(expression[i], options);\n        if (_group instanceof MathNode && lastGroup instanceof MathNode) {\n            // Concatenate adjacent <mtext>s\n            if (_group.type === \"mtext\" && lastGroup.type === \"mtext\" && _group.getAttribute(\"mathvariant\") === lastGroup.getAttribute(\"mathvariant\")) {\n                lastGroup.children.push(..._group.children);\n                continue; // Concatenate adjacent <mn>s\n            } else if (_group.type === \"mn\" && lastGroup.type === \"mn\") {\n                lastGroup.children.push(..._group.children);\n                continue; // Concatenate <mn>...</mn> followed by <mi>.</mi>\n            } else if (_group.type === \"mi\" && _group.children.length === 1 && lastGroup.type === \"mn\") {\n                var child = _group.children[0];\n                if (child instanceof TextNode && child.text === \".\") {\n                    lastGroup.children.push(..._group.children);\n                    continue;\n                }\n            } else if (lastGroup.type === \"mi\" && lastGroup.children.length === 1) {\n                var lastChild = lastGroup.children[0];\n                if (lastChild instanceof TextNode && lastChild.text === \"̸\" && (_group.type === \"mo\" || _group.type === \"mi\" || _group.type === \"mn\")) {\n                    var _child = _group.children[0];\n                    if (_child instanceof TextNode && _child.text.length > 0) {\n                        // Overlay with combining character long solidus\n                        _child.text = _child.text.slice(0, 1) + \"̸\" + _child.text.slice(1);\n                        groups.pop();\n                    }\n                }\n            }\n        }\n        groups.push(_group);\n        lastGroup = _group;\n    }\n    return groups;\n};\n/**\n * Equivalent to buildExpression, but wraps the elements in an <mrow>\n * if there's more than one.  Returns a single node instead of an array.\n */ var buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) {\n    return makeRow(buildExpression(expression, options, isOrdgroup));\n};\n/**\n * Takes a group from the parser and calls the appropriate groupBuilders function\n * on it to produce a MathML node.\n */ var buildGroup = function buildGroup(group, options) {\n    if (!group) {\n        return new mathMLTree.MathNode(\"mrow\");\n    }\n    if (_mathmlGroupBuilders[group.type]) {\n        // Call the groupBuilders function\n        // $FlowFixMe\n        var result = _mathmlGroupBuilders[group.type](group, options); // $FlowFixMe\n        return result;\n    } else {\n        throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n    }\n};\n/**\n * Takes a full parse tree and settings and builds a MathML representation of\n * it. In particular, we put the elements from building the parse tree into a\n * <semantics> tag so we can also include that TeX source as an annotation.\n *\n * Note that we actually return a domTree element with a `<math>` inside it so\n * we can do appropriate styling.\n */ function buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) {\n    var expression = buildExpression(tree, options); // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes\n    // and add spacing nodes. This is necessary only adjacent to math operators\n    // like \\sin or \\lim or to subsup elements that contain math operators.\n    // MathML takes care of the other spacing issues.\n    // Wrap up the expression in an mrow so it is presented in the semantics\n    // tag correctly, unless it's a single <mrow> or <mtable>.\n    var wrapper;\n    if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains([\n        \"mrow\",\n        \"mtable\"\n    ], expression[0].type)) {\n        wrapper = expression[0];\n    } else {\n        wrapper = new mathMLTree.MathNode(\"mrow\", expression);\n    } // Build a TeX annotation of the source\n    var annotation = new mathMLTree.MathNode(\"annotation\", [\n        new mathMLTree.TextNode(texExpression)\n    ]);\n    annotation.setAttribute(\"encoding\", \"application/x-tex\");\n    var semantics = new mathMLTree.MathNode(\"semantics\", [\n        wrapper,\n        annotation\n    ]);\n    var math = new mathMLTree.MathNode(\"math\", [\n        semantics\n    ]);\n    math.setAttribute(\"xmlns\", \"http://www.w3.org/1998/Math/MathML\");\n    if (isDisplayMode) {\n        math.setAttribute(\"display\", \"block\");\n    } // You can't style <math> nodes, so we wrap the node in a span.\n    // NOTE: The span class is not typed to have <math> nodes as children, and\n    // we don't want to make the children type more generic since the children\n    // of span are expected to have more fields in `buildHtml` contexts.\n    var wrapperClass = forMathmlOnly ? \"katex\" : \"katex-mathml\"; // $FlowFixMe\n    return buildCommon.makeSpan([\n        wrapperClass\n    ], [\n        math\n    ]);\n}\nvar optionsFromSettings = function optionsFromSettings(settings) {\n    return new Options({\n        style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT,\n        maxSize: settings.maxSize,\n        minRuleThickness: settings.minRuleThickness\n    });\n};\nvar displayWrap = function displayWrap(node, settings) {\n    if (settings.displayMode) {\n        var classes = [\n            \"katex-display\"\n        ];\n        if (settings.leqno) {\n            classes.push(\"leqno\");\n        }\n        if (settings.fleqn) {\n            classes.push(\"fleqn\");\n        }\n        node = buildCommon.makeSpan(classes, [\n            node\n        ]);\n    }\n    return node;\n};\nvar buildTree = function buildTree(tree, expression, settings) {\n    var options = optionsFromSettings(settings);\n    var katexNode;\n    if (settings.output === \"mathml\") {\n        return buildMathML(tree, expression, options, settings.displayMode, true);\n    } else if (settings.output === \"html\") {\n        var htmlNode = buildHTML(tree, options);\n        katexNode = buildCommon.makeSpan([\n            \"katex\"\n        ], [\n            htmlNode\n        ]);\n    } else {\n        var mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false);\n        var _htmlNode = buildHTML(tree, options);\n        katexNode = buildCommon.makeSpan([\n            \"katex\"\n        ], [\n            mathMLNode,\n            _htmlNode\n        ]);\n    }\n    return displayWrap(katexNode, settings);\n};\nvar buildHTMLTree = function buildHTMLTree(tree, expression, settings) {\n    var options = optionsFromSettings(settings);\n    var htmlNode = buildHTML(tree, options);\n    var katexNode = buildCommon.makeSpan([\n        \"katex\"\n    ], [\n        htmlNode\n    ]);\n    return displayWrap(katexNode, settings);\n};\n/**\n * This file provides support to buildMathML.js and buildHTML.js\n * for stretchy wide elements rendered from SVG files\n * and other CSS trickery.\n */ var stretchyCodePoint = {\n    widehat: \"^\",\n    widecheck: \"ˇ\",\n    widetilde: \"~\",\n    utilde: \"~\",\n    overleftarrow: \"←\",\n    underleftarrow: \"←\",\n    xleftarrow: \"←\",\n    overrightarrow: \"→\",\n    underrightarrow: \"→\",\n    xrightarrow: \"→\",\n    underbrace: \"⏟\",\n    overbrace: \"⏞\",\n    overgroup: \"⏠\",\n    undergroup: \"⏡\",\n    overleftrightarrow: \"↔\",\n    underleftrightarrow: \"↔\",\n    xleftrightarrow: \"↔\",\n    Overrightarrow: \"⇒\",\n    xRightarrow: \"⇒\",\n    overleftharpoon: \"↼\",\n    xleftharpoonup: \"↼\",\n    overrightharpoon: \"⇀\",\n    xrightharpoonup: \"⇀\",\n    xLeftarrow: \"⇐\",\n    xLeftrightarrow: \"⇔\",\n    xhookleftarrow: \"↩\",\n    xhookrightarrow: \"↪\",\n    xmapsto: \"↦\",\n    xrightharpoondown: \"⇁\",\n    xleftharpoondown: \"↽\",\n    xrightleftharpoons: \"⇌\",\n    xleftrightharpoons: \"⇋\",\n    xtwoheadleftarrow: \"↞\",\n    xtwoheadrightarrow: \"↠\",\n    xlongequal: \"=\",\n    xtofrom: \"⇄\",\n    xrightleftarrows: \"⇄\",\n    xrightequilibrium: \"⇌\",\n    // Not a perfect match.\n    xleftequilibrium: \"⇋\",\n    // None better available.\n    \"\\\\cdrightarrow\": \"→\",\n    \"\\\\cdleftarrow\": \"←\",\n    \"\\\\cdlongequal\": \"=\"\n};\nvar mathMLnode = function mathMLnode(label) {\n    var node = new mathMLTree.MathNode(\"mo\", [\n        new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\\\/, \"\")])\n    ]);\n    node.setAttribute(\"stretchy\", \"true\");\n    return node;\n}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.\n// Copyright (c) 2009-2010, Design Science, Inc. (<www.mathjax.org>)\n// Copyright (c) 2014-2017 Khan Academy (<www.khanacademy.org>)\n// Licensed under the SIL Open Font License, Version 1.1.\n// See \\nhttp://scripts.sil.org/OFL\n// Very Long SVGs\n//    Many of the KaTeX stretchy wide elements use a long SVG image and an\n//    overflow: hidden tactic to achieve a stretchy image while avoiding\n//    distortion of arrowheads or brace corners.\n//    The SVG typically contains a very long (400 em) arrow.\n//    The SVG is in a container span that has overflow: hidden, so the span\n//    acts like a window that exposes only part of the  SVG.\n//    The SVG always has a longer, thinner aspect ratio than the container span.\n//    After the SVG fills 100% of the height of the container span,\n//    there is a long arrow shaft left over. That left-over shaft is not shown.\n//    Instead, it is sliced off because the span's CSS has overflow: hidden.\n//    Thus, the reader sees an arrow that matches the subject matter width\n//    without distortion.\n//    Some functions, such as \\cancel, need to vary their aspect ratio. These\n//    functions do not get the overflow SVG treatment.\n// Second Brush Stroke\n//    Low resolution monitors struggle to display images in fine detail.\n//    So browsers apply anti-aliasing. A long straight arrow shaft therefore\n//    will sometimes appear as if it has a blurred edge.\n//    To mitigate this, these SVG files contain a second \"brush-stroke\" on the\n//    arrow shafts. That is, a second long thin rectangular SVG path has been\n//    written directly on top of each arrow shaft. This reinforcement causes\n//    some of the screen pixels to display as black instead of the anti-aliased\n//    gray pixel that a  single path would generate. So we get arrow shafts\n//    whose edges appear to be sharper.\n// In the katexImagesData object just below, the dimensions all\n// correspond to path geometry inside the relevant SVG.\n// For example, \\overrightarrow uses the same arrowhead as glyph U+2192\n// from the KaTeX Main font. The scaling factor is 1000.\n// That is, inside the font, that arrowhead is 522 units tall, which\n// corresponds to 0.522 em inside the document.\nvar katexImagesData = {\n    //   path(s), minWidth, height, align\n    overrightarrow: [\n        [\n            \"rightarrow\"\n        ],\n        0.888,\n        522,\n        \"xMaxYMin\"\n    ],\n    overleftarrow: [\n        [\n            \"leftarrow\"\n        ],\n        0.888,\n        522,\n        \"xMinYMin\"\n    ],\n    underrightarrow: [\n        [\n            \"rightarrow\"\n        ],\n        0.888,\n        522,\n        \"xMaxYMin\"\n    ],\n    underleftarrow: [\n        [\n            \"leftarrow\"\n        ],\n        0.888,\n        522,\n        \"xMinYMin\"\n    ],\n    xrightarrow: [\n        [\n            \"rightarrow\"\n        ],\n        1.469,\n        522,\n        \"xMaxYMin\"\n    ],\n    \"\\\\cdrightarrow\": [\n        [\n            \"rightarrow\"\n        ],\n        3.0,\n        522,\n        \"xMaxYMin\"\n    ],\n    // CD minwwidth2.5pc\n    xleftarrow: [\n        [\n            \"leftarrow\"\n        ],\n        1.469,\n        522,\n        \"xMinYMin\"\n    ],\n    \"\\\\cdleftarrow\": [\n        [\n            \"leftarrow\"\n        ],\n        3.0,\n        522,\n        \"xMinYMin\"\n    ],\n    Overrightarrow: [\n        [\n            \"doublerightarrow\"\n        ],\n        0.888,\n        560,\n        \"xMaxYMin\"\n    ],\n    xRightarrow: [\n        [\n            \"doublerightarrow\"\n        ],\n        1.526,\n        560,\n        \"xMaxYMin\"\n    ],\n    xLeftarrow: [\n        [\n            \"doubleleftarrow\"\n        ],\n        1.526,\n        560,\n        \"xMinYMin\"\n    ],\n    overleftharpoon: [\n        [\n            \"leftharpoon\"\n        ],\n        0.888,\n        522,\n        \"xMinYMin\"\n    ],\n    xleftharpoonup: [\n        [\n            \"leftharpoon\"\n        ],\n        0.888,\n        522,\n        \"xMinYMin\"\n    ],\n    xleftharpoondown: [\n        [\n            \"leftharpoondown\"\n        ],\n        0.888,\n        522,\n        \"xMinYMin\"\n    ],\n    overrightharpoon: [\n        [\n            \"rightharpoon\"\n        ],\n        0.888,\n        522,\n        \"xMaxYMin\"\n    ],\n    xrightharpoonup: [\n        [\n            \"rightharpoon\"\n        ],\n        0.888,\n        522,\n        \"xMaxYMin\"\n    ],\n    xrightharpoondown: [\n        [\n            \"rightharpoondown\"\n        ],\n        0.888,\n        522,\n        \"xMaxYMin\"\n    ],\n    xlongequal: [\n        [\n            \"longequal\"\n        ],\n        0.888,\n        334,\n        \"xMinYMin\"\n    ],\n    \"\\\\cdlongequal\": [\n        [\n            \"longequal\"\n        ],\n        3.0,\n        334,\n        \"xMinYMin\"\n    ],\n    xtwoheadleftarrow: [\n        [\n            \"twoheadleftarrow\"\n        ],\n        0.888,\n        334,\n        \"xMinYMin\"\n    ],\n    xtwoheadrightarrow: [\n        [\n            \"twoheadrightarrow\"\n        ],\n        0.888,\n        334,\n        \"xMaxYMin\"\n    ],\n    overleftrightarrow: [\n        [\n            \"leftarrow\",\n            \"rightarrow\"\n        ],\n        0.888,\n        522\n    ],\n    overbrace: [\n        [\n            \"leftbrace\",\n            \"midbrace\",\n            \"rightbrace\"\n        ],\n        1.6,\n        548\n    ],\n    underbrace: [\n        [\n            \"leftbraceunder\",\n            \"midbraceunder\",\n            \"rightbraceunder\"\n        ],\n        1.6,\n        548\n    ],\n    underleftrightarrow: [\n        [\n            \"leftarrow\",\n            \"rightarrow\"\n        ],\n        0.888,\n        522\n    ],\n    xleftrightarrow: [\n        [\n            \"leftarrow\",\n            \"rightarrow\"\n        ],\n        1.75,\n        522\n    ],\n    xLeftrightarrow: [\n        [\n            \"doubleleftarrow\",\n            \"doublerightarrow\"\n        ],\n        1.75,\n        560\n    ],\n    xrightleftharpoons: [\n        [\n            \"leftharpoondownplus\",\n            \"rightharpoonplus\"\n        ],\n        1.75,\n        716\n    ],\n    xleftrightharpoons: [\n        [\n            \"leftharpoonplus\",\n            \"rightharpoondownplus\"\n        ],\n        1.75,\n        716\n    ],\n    xhookleftarrow: [\n        [\n            \"leftarrow\",\n            \"righthook\"\n        ],\n        1.08,\n        522\n    ],\n    xhookrightarrow: [\n        [\n            \"lefthook\",\n            \"rightarrow\"\n        ],\n        1.08,\n        522\n    ],\n    overlinesegment: [\n        [\n            \"leftlinesegment\",\n            \"rightlinesegment\"\n        ],\n        0.888,\n        522\n    ],\n    underlinesegment: [\n        [\n            \"leftlinesegment\",\n            \"rightlinesegment\"\n        ],\n        0.888,\n        522\n    ],\n    overgroup: [\n        [\n            \"leftgroup\",\n            \"rightgroup\"\n        ],\n        0.888,\n        342\n    ],\n    undergroup: [\n        [\n            \"leftgroupunder\",\n            \"rightgroupunder\"\n        ],\n        0.888,\n        342\n    ],\n    xmapsto: [\n        [\n            \"leftmapsto\",\n            \"rightarrow\"\n        ],\n        1.5,\n        522\n    ],\n    xtofrom: [\n        [\n            \"leftToFrom\",\n            \"rightToFrom\"\n        ],\n        1.75,\n        528\n    ],\n    // The next three arrows are from the mhchem package.\n    // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the\n    // document as \\xrightarrow or \\xrightleftharpoons. Those have\n    // min-length = 1.75em, so we set min-length on these next three to match.\n    xrightleftarrows: [\n        [\n            \"baraboveleftarrow\",\n            \"rightarrowabovebar\"\n        ],\n        1.75,\n        901\n    ],\n    xrightequilibrium: [\n        [\n            \"baraboveshortleftharpoon\",\n            \"rightharpoonaboveshortbar\"\n        ],\n        1.75,\n        716\n    ],\n    xleftequilibrium: [\n        [\n            \"shortbaraboveleftharpoon\",\n            \"shortrightharpoonabovebar\"\n        ],\n        1.75,\n        716\n    ]\n};\nvar groupLength = function groupLength(arg) {\n    if (arg.type === \"ordgroup\") {\n        return arg.body.length;\n    } else {\n        return 1;\n    }\n};\nvar svgSpan = function svgSpan(group, options) {\n    // Create a span with inline SVG for the element.\n    function buildSvgSpan_() {\n        var viewBoxWidth = 400000; // default\n        var label = group.label.slice(1);\n        if (utils.contains([\n            \"widehat\",\n            \"widecheck\",\n            \"widetilde\",\n            \"utilde\"\n        ], label)) {\n            // Each type in the `if` statement corresponds to one of the ParseNode\n            // types below. This narrowing is required to access `grp.base`.\n            // $FlowFixMe\n            var grp = group; // There are four SVG images available for each function.\n            // Choose a taller image when there are more characters.\n            var numChars = groupLength(grp.base);\n            var viewBoxHeight;\n            var pathName;\n            var _height;\n            if (numChars > 5) {\n                if (label === \"widehat\" || label === \"widecheck\") {\n                    viewBoxHeight = 420;\n                    viewBoxWidth = 2364;\n                    _height = 0.42;\n                    pathName = label + \"4\";\n                } else {\n                    viewBoxHeight = 312;\n                    viewBoxWidth = 2340;\n                    _height = 0.34;\n                    pathName = \"tilde4\";\n                }\n            } else {\n                var imgIndex = [\n                    1,\n                    1,\n                    2,\n                    2,\n                    3,\n                    3\n                ][numChars];\n                if (label === \"widehat\" || label === \"widecheck\") {\n                    viewBoxWidth = [\n                        0,\n                        1062,\n                        2364,\n                        2364,\n                        2364\n                    ][imgIndex];\n                    viewBoxHeight = [\n                        0,\n                        239,\n                        300,\n                        360,\n                        420\n                    ][imgIndex];\n                    _height = [\n                        0,\n                        0.24,\n                        0.3,\n                        0.3,\n                        0.36,\n                        0.42\n                    ][imgIndex];\n                    pathName = label + imgIndex;\n                } else {\n                    viewBoxWidth = [\n                        0,\n                        600,\n                        1033,\n                        2339,\n                        2340\n                    ][imgIndex];\n                    viewBoxHeight = [\n                        0,\n                        260,\n                        286,\n                        306,\n                        312\n                    ][imgIndex];\n                    _height = [\n                        0,\n                        0.26,\n                        0.286,\n                        0.3,\n                        0.306,\n                        0.34\n                    ][imgIndex];\n                    pathName = \"tilde\" + imgIndex;\n                }\n            }\n            var path = new PathNode(pathName);\n            var svgNode = new SvgNode([\n                path\n            ], {\n                \"width\": \"100%\",\n                \"height\": makeEm(_height),\n                \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight,\n                \"preserveAspectRatio\": \"none\"\n            });\n            return {\n                span: buildCommon.makeSvgSpan([], [\n                    svgNode\n                ], options),\n                minWidth: 0,\n                height: _height\n            };\n        } else {\n            var spans = [];\n            var data = katexImagesData[label];\n            var [paths, _minWidth, _viewBoxHeight] = data;\n            var _height2 = _viewBoxHeight / 1000;\n            var numSvgChildren = paths.length;\n            var widthClasses;\n            var aligns;\n            if (numSvgChildren === 1) {\n                // $FlowFixMe: All these cases must be of the 4-tuple type.\n                var align1 = data[3];\n                widthClasses = [\n                    \"hide-tail\"\n                ];\n                aligns = [\n                    align1\n                ];\n            } else if (numSvgChildren === 2) {\n                widthClasses = [\n                    \"halfarrow-left\",\n                    \"halfarrow-right\"\n                ];\n                aligns = [\n                    \"xMinYMin\",\n                    \"xMaxYMin\"\n                ];\n            } else if (numSvgChildren === 3) {\n                widthClasses = [\n                    \"brace-left\",\n                    \"brace-center\",\n                    \"brace-right\"\n                ];\n                aligns = [\n                    \"xMinYMin\",\n                    \"xMidYMin\",\n                    \"xMaxYMin\"\n                ];\n            } else {\n                throw new Error(\"Correct katexImagesData or update code here to support\\n                    \" + numSvgChildren + \" children.\");\n            }\n            for(var i = 0; i < numSvgChildren; i++){\n                var _path = new PathNode(paths[i]);\n                var _svgNode = new SvgNode([\n                    _path\n                ], {\n                    \"width\": \"400em\",\n                    \"height\": makeEm(_height2),\n                    \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + _viewBoxHeight,\n                    \"preserveAspectRatio\": aligns[i] + \" slice\"\n                });\n                var _span = buildCommon.makeSvgSpan([\n                    widthClasses[i]\n                ], [\n                    _svgNode\n                ], options);\n                if (numSvgChildren === 1) {\n                    return {\n                        span: _span,\n                        minWidth: _minWidth,\n                        height: _height2\n                    };\n                } else {\n                    _span.style.height = makeEm(_height2);\n                    spans.push(_span);\n                }\n            }\n            return {\n                span: buildCommon.makeSpan([\n                    \"stretchy\"\n                ], spans, options),\n                minWidth: _minWidth,\n                height: _height2\n            };\n        }\n    } // buildSvgSpan_()\n    var { span, minWidth, height } = buildSvgSpan_(); // Note that we are returning span.depth = 0.\n    // Any adjustments relative to the baseline must be done in buildHTML.\n    span.height = height;\n    span.style.height = makeEm(height);\n    if (minWidth > 0) {\n        span.style.minWidth = makeEm(minWidth);\n    }\n    return span;\n};\nvar encloseSpan = function encloseSpan(inner, label, topPad, bottomPad, options) {\n    // Return an image span for \\cancel, \\bcancel, \\xcancel, \\fbox, or \\angl\n    var img;\n    var totalHeight = inner.height + inner.depth + topPad + bottomPad;\n    if (/fbox|color|angl/.test(label)) {\n        img = buildCommon.makeSpan([\n            \"stretchy\",\n            label\n        ], [], options);\n        if (label === \"fbox\") {\n            var color = options.color && options.getColor();\n            if (color) {\n                img.style.borderColor = color;\n            }\n        }\n    } else {\n        // \\cancel, \\bcancel, or \\xcancel\n        // Since \\cancel's SVG is inline and it omits the viewBox attribute,\n        // its stroke-width will not vary with span area.\n        var lines = [];\n        if (/^[bx]cancel$/.test(label)) {\n            lines.push(new LineNode({\n                \"x1\": \"0\",\n                \"y1\": \"0\",\n                \"x2\": \"100%\",\n                \"y2\": \"100%\",\n                \"stroke-width\": \"0.046em\"\n            }));\n        }\n        if (/^x?cancel$/.test(label)) {\n            lines.push(new LineNode({\n                \"x1\": \"0\",\n                \"y1\": \"100%\",\n                \"x2\": \"100%\",\n                \"y2\": \"0\",\n                \"stroke-width\": \"0.046em\"\n            }));\n        }\n        var svgNode = new SvgNode(lines, {\n            \"width\": \"100%\",\n            \"height\": makeEm(totalHeight)\n        });\n        img = buildCommon.makeSvgSpan([], [\n            svgNode\n        ], options);\n    }\n    img.height = totalHeight;\n    img.style.height = makeEm(totalHeight);\n    return img;\n};\nvar stretchy = {\n    encloseSpan,\n    mathMLnode,\n    svgSpan\n};\n/**\n * Asserts that the node is of the given type and returns it with stricter\n * typing. Throws if the node's type does not match.\n */ function assertNodeType(node, type) {\n    if (!node || node.type !== type) {\n        throw new Error(\"Expected node of type \" + type + \", but got \" + (node ? \"node of type \" + node.type : String(node)));\n    } // $FlowFixMe, >=0.125\n    return node;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */ function assertSymbolNodeType(node) {\n    var typedNode = checkSymbolNodeType(node);\n    if (!typedNode) {\n        throw new Error(\"Expected node of symbol group type, but got \" + (node ? \"node of type \" + node.type : String(node)));\n    }\n    return typedNode;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */ function checkSymbolNodeType(node) {\n    if (node && (node.type === \"atom\" || NON_ATOMS.hasOwnProperty(node.type))) {\n        // $FlowFixMe\n        return node;\n    }\n    return null;\n}\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"accent\", but\n// also \"supsub\" since an accent can affect super/subscripting.\nvar htmlBuilder$a = (grp, options)=>{\n    // Accents are handled in the TeXbook pg. 443, rule 12.\n    var base;\n    var group;\n    var supSubGroup;\n    if (grp && grp.type === \"supsub\") {\n        // If our base is a character box, and we have superscripts and\n        // subscripts, the supsub will defer to us. In particular, we want\n        // to attach the superscripts and subscripts to the inner body (so\n        // that the position of the superscripts and subscripts won't be\n        // affected by the height of the accent). We accomplish this by\n        // sticking the base of the accent into the base of the supsub, and\n        // rendering that, while keeping track of where the accent is.\n        // The real accent group is the base of the supsub group\n        group = assertNodeType(grp.base, \"accent\"); // The character box is the base of the accent group\n        base = group.base; // Stick the character box into the base of the supsub group\n        grp.base = base; // Rerender the supsub group with its new base, and store that\n        // result.\n        supSubGroup = assertSpan(buildGroup$1(grp, options)); // reset original base\n        grp.base = group;\n    } else {\n        group = assertNodeType(grp, \"accent\");\n        base = group.base;\n    } // Build the base group\n    var body = buildGroup$1(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character?\n    var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line \"If the\n    // nucleus is not a single character, let s = 0; otherwise set s to the\n    // kern amount for the nucleus followed by the \\skewchar of its font.\"\n    // Note that our skew metrics are just the kern between each character\n    // and the skewchar.\n    var skew = 0;\n    if (mustShift) {\n        // If the base is a character box, then we want the skew of the\n        // innermost character. To do that, we find the innermost character:\n        var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it\n        var baseGroup = buildGroup$1(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol.\n        skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we\n    // removed with getBaseElem might contain things like \\color which\n    // we can't get rid of.\n    // TODO(emily): Find a better way to get the skew\n    }\n    var accentBelow = group.label === \"\\\\c\"; // calculate the amount of space between the body and the accent\n    var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent\n    var accentBody;\n    if (!group.isStretchy) {\n        var accent;\n        var width;\n        if (group.label === \"\\\\vec\") {\n            // Before version 0.9, \\vec used the combining font glyph U+20D7.\n            // But browsers, especially Safari, are not consistent in how they\n            // render combining characters when not preceded by a character.\n            // So now we use an SVG.\n            // If Safari reforms, we should consider reverting to the glyph.\n            accent = buildCommon.staticSvg(\"vec\", options);\n            width = buildCommon.svgData.vec[1];\n        } else {\n            accent = buildCommon.makeOrd({\n                mode: group.mode,\n                text: group.label\n            }, options, \"textord\");\n            accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to\n            // shift the accent over to a place we don't want.\n            accent.italic = 0;\n            width = accent.width;\n            if (accentBelow) {\n                clearance += accent.depth;\n            }\n        }\n        accentBody = buildCommon.makeSpan([\n            \"accent-body\"\n        ], [\n            accent\n        ]); // \"Full\" accents expand the width of the resulting symbol to be\n        // at least the width of the accent, and overlap directly onto the\n        // character without any vertical offset.\n        var accentFull = group.label === \"\\\\textcircled\";\n        if (accentFull) {\n            accentBody.classes.push(\"accent-full\");\n            clearance = body.height;\n        } // Shift the accent over by the skew.\n        var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }`\n        // so that the accent doesn't contribute to the bounding box.\n        // We need to shift the character by its width (effectively half\n        // its width) to compensate.\n        if (!accentFull) {\n            left -= width / 2;\n        }\n        accentBody.style.left = makeEm(left); // \\textcircled uses the \\bigcirc glyph, so it needs some\n        // vertical adjustment to match LaTeX.\n        if (group.label === \"\\\\textcircled\") {\n            accentBody.style.top = \".2em\";\n        }\n        accentBody = buildCommon.makeVList({\n            positionType: \"firstBaseline\",\n            children: [\n                {\n                    type: \"elem\",\n                    elem: body\n                },\n                {\n                    type: \"kern\",\n                    size: -clearance\n                },\n                {\n                    type: \"elem\",\n                    elem: accentBody\n                }\n            ]\n        }, options);\n    } else {\n        accentBody = stretchy.svgSpan(group, options);\n        accentBody = buildCommon.makeVList({\n            positionType: \"firstBaseline\",\n            children: [\n                {\n                    type: \"elem\",\n                    elem: body\n                },\n                {\n                    type: \"elem\",\n                    elem: accentBody,\n                    wrapperClasses: [\n                        \"svg-align\"\n                    ],\n                    wrapperStyle: skew > 0 ? {\n                        width: \"calc(100% - \" + makeEm(2 * skew) + \")\",\n                        marginLeft: makeEm(2 * skew)\n                    } : undefined\n                }\n            ]\n        }, options);\n    }\n    var accentWrap = buildCommon.makeSpan([\n        \"mord\",\n        \"accent\"\n    ], [\n        accentBody\n    ], options);\n    if (supSubGroup) {\n        // Here, we replace the \"base\" child of the supsub with our newly\n        // generated accent.\n        supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the\n        // accent, we manually recalculate height.\n        supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not.\n        supSubGroup.classes[0] = \"mord\";\n        return supSubGroup;\n    } else {\n        return accentWrap;\n    }\n};\nvar mathmlBuilder$9 = (group, options)=>{\n    var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode(\"mo\", [\n        makeText(group.label, group.mode)\n    ]);\n    var node = new mathMLTree.MathNode(\"mover\", [\n        buildGroup(group.base, options),\n        accentNode\n    ]);\n    node.setAttribute(\"accent\", \"true\");\n    return node;\n};\nvar NON_STRETCHY_ACCENT_REGEX = new RegExp([\n    \"\\\\acute\",\n    \"\\\\grave\",\n    \"\\\\ddot\",\n    \"\\\\tilde\",\n    \"\\\\bar\",\n    \"\\\\breve\",\n    \"\\\\check\",\n    \"\\\\hat\",\n    \"\\\\vec\",\n    \"\\\\dot\",\n    \"\\\\mathring\"\n].map((accent)=>\"\\\\\" + accent).join(\"|\")); // Accents\ndefineFunction({\n    type: \"accent\",\n    names: [\n        \"\\\\acute\",\n        \"\\\\grave\",\n        \"\\\\ddot\",\n        \"\\\\tilde\",\n        \"\\\\bar\",\n        \"\\\\breve\",\n        \"\\\\check\",\n        \"\\\\hat\",\n        \"\\\\vec\",\n        \"\\\\dot\",\n        \"\\\\mathring\",\n        \"\\\\widecheck\",\n        \"\\\\widehat\",\n        \"\\\\widetilde\",\n        \"\\\\overrightarrow\",\n        \"\\\\overleftarrow\",\n        \"\\\\Overrightarrow\",\n        \"\\\\overleftrightarrow\",\n        \"\\\\overgroup\",\n        \"\\\\overlinesegment\",\n        \"\\\\overleftharpoon\",\n        \"\\\\overrightharpoon\"\n    ],\n    props: {\n        numArgs: 1\n    },\n    handler: (context, args)=>{\n        var base = normalizeArgument(args[0]);\n        var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);\n        var isShifty = !isStretchy || context.funcName === \"\\\\widehat\" || context.funcName === \"\\\\widetilde\" || context.funcName === \"\\\\widecheck\";\n        return {\n            type: \"accent\",\n            mode: context.parser.mode,\n            label: context.funcName,\n            isStretchy: isStretchy,\n            isShifty: isShifty,\n            base: base\n        };\n    },\n    htmlBuilder: htmlBuilder$a,\n    mathmlBuilder: mathmlBuilder$9\n}); // Text-mode accents\ndefineFunction({\n    type: \"accent\",\n    names: [\n        \"\\\\'\",\n        \"\\\\`\",\n        \"\\\\^\",\n        \"\\\\~\",\n        \"\\\\=\",\n        \"\\\\u\",\n        \"\\\\.\",\n        '\\\\\"',\n        \"\\\\c\",\n        \"\\\\r\",\n        \"\\\\H\",\n        \"\\\\v\",\n        \"\\\\textcircled\"\n    ],\n    props: {\n        numArgs: 1,\n        allowedInText: true,\n        allowedInMath: true,\n        // unless in strict mode\n        argTypes: [\n            \"primitive\"\n        ]\n    },\n    handler: (context, args)=>{\n        var base = args[0];\n        var mode = context.parser.mode;\n        if (mode === \"math\") {\n            context.parser.settings.reportNonstrict(\"mathVsTextAccents\", \"LaTeX's accent \" + context.funcName + \" works only in text mode\");\n            mode = \"text\";\n        }\n        return {\n            type: \"accent\",\n            mode: mode,\n            label: context.funcName,\n            isStretchy: false,\n            isShifty: true,\n            base: base\n        };\n    },\n    htmlBuilder: htmlBuilder$a,\n    mathmlBuilder: mathmlBuilder$9\n});\n// Horizontal overlap functions\ndefineFunction({\n    type: \"accentUnder\",\n    names: [\n        \"\\\\underleftarrow\",\n        \"\\\\underrightarrow\",\n        \"\\\\underleftrightarrow\",\n        \"\\\\undergroup\",\n        \"\\\\underlinesegment\",\n        \"\\\\utilde\"\n    ],\n    props: {\n        numArgs: 1\n    },\n    handler: (_ref, args)=>{\n        var { parser, funcName } = _ref;\n        var base = args[0];\n        return {\n            type: \"accentUnder\",\n            mode: parser.mode,\n            label: funcName,\n            base: base\n        };\n    },\n    htmlBuilder: (group, options)=>{\n        // Treat under accents much like underlines.\n        var innerGroup = buildGroup$1(group.base, options);\n        var accentBody = stretchy.svgSpan(group, options);\n        var kern = group.label === \"\\\\utilde\" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns\n        var vlist = buildCommon.makeVList({\n            positionType: \"top\",\n            positionData: innerGroup.height,\n            children: [\n                {\n                    type: \"elem\",\n                    elem: accentBody,\n                    wrapperClasses: [\n                        \"svg-align\"\n                    ]\n                },\n                {\n                    type: \"kern\",\n                    size: kern\n                },\n                {\n                    type: \"elem\",\n                    elem: innerGroup\n                }\n            ]\n        }, options);\n        return buildCommon.makeSpan([\n            \"mord\",\n            \"accentunder\"\n        ], [\n            vlist\n        ], options);\n    },\n    mathmlBuilder: (group, options)=>{\n        var accentNode = stretchy.mathMLnode(group.label);\n        var node = new mathMLTree.MathNode(\"munder\", [\n            buildGroup(group.base, options),\n            accentNode\n        ]);\n        node.setAttribute(\"accentunder\", \"true\");\n        return node;\n    }\n});\n// Helper function\nvar paddedNode = (group)=>{\n    var node = new mathMLTree.MathNode(\"mpadded\", group ? [\n        group\n    ] : []);\n    node.setAttribute(\"width\", \"+0.6em\");\n    node.setAttribute(\"lspace\", \"0.3em\");\n    return node;\n}; // Stretchy arrows with an optional argument\ndefineFunction({\n    type: \"xArrow\",\n    names: [\n        \"\\\\xleftarrow\",\n        \"\\\\xrightarrow\",\n        \"\\\\xLeftarrow\",\n        \"\\\\xRightarrow\",\n        \"\\\\xleftrightarrow\",\n        \"\\\\xLeftrightarrow\",\n        \"\\\\xhookleftarrow\",\n        \"\\\\xhookrightarrow\",\n        \"\\\\xmapsto\",\n        \"\\\\xrightharpoondown\",\n        \"\\\\xrightharpoonup\",\n        \"\\\\xleftharpoondown\",\n        \"\\\\xleftharpoonup\",\n        \"\\\\xrightleftharpoons\",\n        \"\\\\xleftrightharpoons\",\n        \"\\\\xlongequal\",\n        \"\\\\xtwoheadrightarrow\",\n        \"\\\\xtwoheadleftarrow\",\n        \"\\\\xtofrom\",\n        // Direct use of these functions is discouraged and may break someday.\n        \"\\\\xrightleftarrows\",\n        \"\\\\xrightequilibrium\",\n        \"\\\\xleftequilibrium\",\n        \"\\\\\\\\cdrightarrow\",\n        \"\\\\\\\\cdleftarrow\",\n        \"\\\\\\\\cdlongequal\"\n    ],\n    props: {\n        numArgs: 1,\n        numOptionalArgs: 1\n    },\n    handler (_ref, args, optArgs) {\n        var { parser, funcName } = _ref;\n        return {\n            type: \"xArrow\",\n            mode: parser.mode,\n            label: funcName,\n            body: args[0],\n            below: optArgs[0]\n        };\n    },\n    // Flow is unable to correctly infer the type of `group`, even though it's\n    // unambiguously determined from the passed-in `type` above.\n    htmlBuilder (group, options) {\n        var style = options.style; // Build the argument groups in the appropriate style.\n        // Ref: amsmath.dtx:   \\hbox{$\\scriptstyle\\mkern#3mu{#6}\\mkern#4mu$}%\n        // Some groups can return document fragments.  Handle those by wrapping\n        // them in a span.\n        var newOptions = options.havingStyle(style.sup());\n        var upperGroup = buildCommon.wrapFragment(buildGroup$1(group.body, newOptions, options), options);\n        var arrowPrefix = group.label.slice(0, 2) === \"\\\\x\" ? \"x\" : \"cd\";\n        upperGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n        var lowerGroup;\n        if (group.below) {\n            // Build the lower group\n            newOptions = options.havingStyle(style.sub());\n            lowerGroup = buildCommon.wrapFragment(buildGroup$1(group.below, newOptions, options), options);\n            lowerGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n        }\n        var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0.\n        // The point we want on the math axis is at 0.5 * arrowBody.height.\n        var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\\if0#2\\else\\mkern#2mu\\fi\n        var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu\n        if (upperGroup.depth > 0.25 || group.label === \"\\\\xleftequilibrium\") {\n            upperShift -= upperGroup.depth; // shift up if depth encroaches\n        } // Generate the vlist\n        var vlist;\n        if (lowerGroup) {\n            var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;\n            vlist = buildCommon.makeVList({\n                positionType: \"individualShift\",\n                children: [\n                    {\n                        type: \"elem\",\n                        elem: upperGroup,\n                        shift: upperShift\n                    },\n                    {\n                        type: \"elem\",\n                        elem: arrowBody,\n                        shift: arrowShift\n                    },\n                    {\n                        type: \"elem\",\n                        elem: lowerGroup,\n                        shift: lowerShift\n                    }\n                ]\n            }, options);\n        } else {\n            vlist = buildCommon.makeVList({\n                positionType: \"individualShift\",\n                children: [\n                    {\n                        type: \"elem\",\n                        elem: upperGroup,\n                        shift: upperShift\n                    },\n                    {\n                        type: \"elem\",\n                        elem: arrowBody,\n                        shift: arrowShift\n                    }\n                ]\n            }, options);\n        } // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n        vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n        return buildCommon.makeSpan([\n            \"mrel\",\n            \"x-arrow\"\n        ], [\n            vlist\n        ], options);\n    },\n    mathmlBuilder (group, options) {\n        var arrowNode = stretchy.mathMLnode(group.label);\n        arrowNode.setAttribute(\"minsize\", group.label.charAt(0) === \"x\" ? \"1.75em\" : \"3.0em\");\n        var node;\n        if (group.body) {\n            var upperNode = paddedNode(buildGroup(group.body, options));\n            if (group.below) {\n                var lowerNode = paddedNode(buildGroup(group.below, options));\n                node = new mathMLTree.MathNode(\"munderover\", [\n                    arrowNode,\n                    lowerNode,\n                    upperNode\n                ]);\n            } else {\n                node = new mathMLTree.MathNode(\"mover\", [\n                    arrowNode,\n                    upperNode\n                ]);\n            }\n        } else if (group.below) {\n            var _lowerNode = paddedNode(buildGroup(group.below, options));\n            node = new mathMLTree.MathNode(\"munder\", [\n                arrowNode,\n                _lowerNode\n            ]);\n        } else {\n            // This should never happen.\n            // Parser.js throws an error if there is no argument.\n            node = paddedNode();\n            node = new mathMLTree.MathNode(\"mover\", [\n                arrowNode,\n                node\n            ]);\n        }\n        return node;\n    }\n});\nvar makeSpan = buildCommon.makeSpan;\nfunction htmlBuilder$9(group, options) {\n    var elements = buildExpression$1(group.body, options, true);\n    return makeSpan([\n        group.mclass\n    ], elements, options);\n}\nfunction mathmlBuilder$8(group, options) {\n    var node;\n    var inner = buildExpression(group.body, options);\n    if (group.mclass === \"minner\") {\n        node = new mathMLTree.MathNode(\"mpadded\", inner);\n    } else if (group.mclass === \"mord\") {\n        if (group.isCharacterBox) {\n            node = inner[0];\n            node.type = \"mi\";\n        } else {\n            node = new mathMLTree.MathNode(\"mi\", inner);\n        }\n    } else {\n        if (group.isCharacterBox) {\n            node = inner[0];\n            node.type = \"mo\";\n        } else {\n            node = new mathMLTree.MathNode(\"mo\", inner);\n        } // Set spacing based on what is the most likely adjacent atom type.\n        // See TeXbook p170.\n        if (group.mclass === \"mbin\") {\n            node.attributes.lspace = \"0.22em\"; // medium space\n            node.attributes.rspace = \"0.22em\";\n        } else if (group.mclass === \"mpunct\") {\n            node.attributes.lspace = \"0em\";\n            node.attributes.rspace = \"0.17em\"; // thinspace\n        } else if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n            node.attributes.lspace = \"0em\";\n            node.attributes.rspace = \"0em\";\n        } else if (group.mclass === \"minner\") {\n            node.attributes.lspace = \"0.0556em\"; // 1 mu is the most likely option\n            node.attributes.width = \"+0.1111em\";\n        } // MathML <mo> default space is 5/18 em, so <mrel> needs no action.\n    // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo\n    }\n    return node;\n} // Math class commands except \\mathop\ndefineFunction({\n    type: \"mclass\",\n    names: [\n        \"\\\\mathord\",\n        \"\\\\mathbin\",\n        \"\\\\mathrel\",\n        \"\\\\mathopen\",\n        \"\\\\mathclose\",\n        \"\\\\mathpunct\",\n        \"\\\\mathinner\"\n    ],\n    props: {\n        numArgs: 1,\n        primitive: true\n    },\n    handler (_ref, args) {\n        var { parser, funcName } = _ref;\n        var body = args[0];\n        return {\n            type: \"mclass\",\n            mode: parser.mode,\n            mclass: \"m\" + funcName.slice(5),\n            // TODO(kevinb): don't prefix with 'm'\n            body: ordargument(body),\n            isCharacterBox: utils.isCharacterBox(body)\n        };\n    },\n    htmlBuilder: htmlBuilder$9,\n    mathmlBuilder: mathmlBuilder$8\n});\nvar binrelClass = (arg)=>{\n    // \\binrel@ spacing varies with (bin|rel|ord) of the atom in the argument.\n    // (by rendering separately and with {}s before and after, and measuring\n    // the change in spacing).  We'll do roughly the same by detecting the\n    // atom type directly.\n    var atom = arg.type === \"ordgroup\" && arg.body.length ? arg.body[0] : arg;\n    if (atom.type === \"atom\" && (atom.family === \"bin\" || atom.family === \"rel\")) {\n        return \"m\" + atom.family;\n    } else {\n        return \"mord\";\n    }\n}; // \\@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord.\n// This is equivalent to \\binrel@{x}\\binrel@@{y} in AMSTeX.\ndefineFunction({\n    type: \"mclass\",\n    names: [\n        \"\\\\@binrel\"\n    ],\n    props: {\n        numArgs: 2\n    },\n    handler (_ref2, args) {\n        var { parser } = _ref2;\n        return {\n            type: \"mclass\",\n            mode: parser.mode,\n            mclass: binrelClass(args[0]),\n            body: ordargument(args[1]),\n            isCharacterBox: utils.isCharacterBox(args[1])\n        };\n    }\n}); // Build a relation or stacked op by placing one symbol on top of another\ndefineFunction({\n    type: \"mclass\",\n    names: [\n        \"\\\\stackrel\",\n        \"\\\\overset\",\n        \"\\\\underset\"\n    ],\n    props: {\n        numArgs: 2\n    },\n    handler (_ref3, args) {\n        var { parser, funcName } = _ref3;\n        var baseArg = args[1];\n        var shiftedArg = args[0];\n        var mclass;\n        if (funcName !== \"\\\\stackrel\") {\n            // LaTeX applies \\binrel spacing to \\overset and \\underset.\n            mclass = binrelClass(baseArg);\n        } else {\n            mclass = \"mrel\"; // for \\stackrel\n        }\n        var baseOp = {\n            type: \"op\",\n            mode: baseArg.mode,\n            limits: true,\n            alwaysHandleSupSub: true,\n            parentIsSupSub: false,\n            symbol: false,\n            suppressBaseShift: funcName !== \"\\\\stackrel\",\n            body: ordargument(baseArg)\n        };\n        var supsub = {\n            type: \"supsub\",\n            mode: shiftedArg.mode,\n            base: baseOp,\n            sup: funcName === \"\\\\underset\" ? null : shiftedArg,\n            sub: funcName === \"\\\\underset\" ? shiftedArg : null\n        };\n        return {\n            type: \"mclass\",\n            mode: parser.mode,\n            mclass,\n            body: [\n                supsub\n            ],\n            isCharacterBox: utils.isCharacterBox(supsub)\n        };\n    },\n    htmlBuilder: htmlBuilder$9,\n    mathmlBuilder: mathmlBuilder$8\n});\n// \\pmb is a simulation of bold font.\n// The version of \\pmb in ambsy.sty works by typesetting three copies\n// with small offsets. We use CSS text-shadow.\n// It's a hack. Not as good as a real bold font. Better than nothing.\ndefineFunction({\n    type: \"pmb\",\n    names: [\n        \"\\\\pmb\"\n    ],\n    props: {\n        numArgs: 1,\n        allowedInText: true\n    },\n    handler (_ref, args) {\n        var { parser } = _ref;\n        return {\n            type: \"pmb\",\n            mode: parser.mode,\n            mclass: binrelClass(args[0]),\n            body: ordargument(args[0])\n        };\n    },\n    htmlBuilder (group, options) {\n        var elements = buildExpression$1(group.body, options, true);\n        var node = buildCommon.makeSpan([\n            group.mclass\n        ], elements, options);\n        node.style.textShadow = \"0.02em 0.01em 0.04px\";\n        return node;\n    },\n    mathmlBuilder (group, style) {\n        var inner = buildExpression(group.body, style); // Wrap with an <mstyle> element.\n        var node = new mathMLTree.MathNode(\"mstyle\", inner);\n        node.setAttribute(\"style\", \"text-shadow: 0.02em 0.01em 0.04px\");\n        return node;\n    }\n});\nvar cdArrowFunctionName = {\n    \">\": \"\\\\\\\\cdrightarrow\",\n    \"<\": \"\\\\\\\\cdleftarrow\",\n    \"=\": \"\\\\\\\\cdlongequal\",\n    \"A\": \"\\\\uparrow\",\n    \"V\": \"\\\\downarrow\",\n    \"|\": \"\\\\Vert\",\n    \".\": \"no arrow\"\n};\nvar newCell = ()=>{\n    // Create an empty cell, to be filled below with parse nodes.\n    // The parseTree from this module must be constructed like the\n    // one created by parseArray(), so an empty CD cell must\n    // be a ParseNode<\"styling\">. And CD is always displaystyle.\n    // So these values are fixed and flow can do implicit typing.\n    return {\n        type: \"styling\",\n        body: [],\n        mode: \"math\",\n        style: \"display\"\n    };\n};\nvar isStartOfArrow = (node)=>{\n    return node.type === \"textord\" && node.text === \"@\";\n};\nvar isLabelEnd = (node, endChar)=>{\n    return (node.type === \"mathord\" || node.type === \"atom\") && node.text === endChar;\n};\nfunction cdArrow(arrowChar, labels, parser) {\n    // Return a parse tree of an arrow and its labels.\n    // This acts in a way similar to a macro expansion.\n    var funcName = cdArrowFunctionName[arrowChar];\n    switch(funcName){\n        case \"\\\\\\\\cdrightarrow\":\n        case \"\\\\\\\\cdleftarrow\":\n            return parser.callFunction(funcName, [\n                labels[0]\n            ], [\n                labels[1]\n            ]);\n        case \"\\\\uparrow\":\n        case \"\\\\downarrow\":\n            {\n                var leftLabel = parser.callFunction(\"\\\\\\\\cdleft\", [\n                    labels[0]\n                ], []);\n                var bareArrow = {\n                    type: \"atom\",\n                    text: funcName,\n                    mode: \"math\",\n                    family: \"rel\"\n                };\n                var sizedArrow = parser.callFunction(\"\\\\Big\", [\n                    bareArrow\n                ], []);\n                var rightLabel = parser.callFunction(\"\\\\\\\\cdright\", [\n                    labels[1]\n                ], []);\n                var arrowGroup = {\n                    type: \"ordgroup\",\n                    mode: \"math\",\n                    body: [\n                        leftLabel,\n                        sizedArrow,\n                        rightLabel\n                    ]\n                };\n                return parser.callFunction(\"\\\\\\\\cdparent\", [\n                    arrowGroup\n                ], []);\n            }\n        case \"\\\\\\\\cdlongequal\":\n            return parser.callFunction(\"\\\\\\\\cdlongequal\", [], []);\n        case \"\\\\Vert\":\n            {\n                var arrow = {\n                    type: \"textord\",\n                    text: \"\\\\Vert\",\n                    mode: \"math\"\n                };\n                return parser.callFunction(\"\\\\Big\", [\n                    arrow\n                ], []);\n            }\n        default:\n            return {\n                type: \"textord\",\n                text: \" \",\n                mode: \"math\"\n            };\n    }\n}\nfunction parseCD(parser) {\n    // Get the array's parse nodes with \\\\ temporarily mapped to \\cr.\n    var parsedRows = [];\n    parser.gullet.beginGroup();\n    parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n    parser.gullet.beginGroup();\n    while(true){\n        // eslint-disable-line no-constant-condition\n        // Get the parse nodes for the next row.\n        parsedRows.push(parser.parseExpression(false, \"\\\\\\\\\"));\n        parser.gullet.endGroup();\n        parser.gullet.beginGroup();\n        var next = parser.fetch().text;\n        if (next === \"&\" || next === \"\\\\\\\\\") {\n            parser.consume();\n        } else if (next === \"\\\\end\") {\n            if (parsedRows[parsedRows.length - 1].length === 0) {\n                parsedRows.pop(); // final row ended in \\\\\n            }\n            break;\n        } else {\n            throw new ParseError(\"Expected \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n        }\n    }\n    var row = [];\n    var body = [\n        row\n    ]; // Loop thru the parse nodes. Collect them into cells and arrows.\n    for(var i = 0; i < parsedRows.length; i++){\n        // Start a new row.\n        var rowNodes = parsedRows[i]; // Create the first cell.\n        var cell = newCell();\n        for(var j = 0; j < rowNodes.length; j++){\n            if (!isStartOfArrow(rowNodes[j])) {\n                // If a parseNode is not an arrow, it goes into a cell.\n                cell.body.push(rowNodes[j]);\n            } else {\n                // Parse node j is an \"@\", the start of an arrow.\n                // Before starting on the arrow, push the cell into `row`.\n                row.push(cell); // Now collect parseNodes into an arrow.\n                // The character after \"@\" defines the arrow type.\n                j += 1;\n                var arrowChar = assertSymbolNodeType(rowNodes[j]).text; // Create two empty label nodes. We may or may not use them.\n                var labels = new Array(2);\n                labels[0] = {\n                    type: \"ordgroup\",\n                    mode: \"math\",\n                    body: []\n                };\n                labels[1] = {\n                    type: \"ordgroup\",\n                    mode: \"math\",\n                    body: []\n                }; // Process the arrow.\n                if (\"=|.\".indexOf(arrowChar) > -1) ;\n                else if (\"<>AV\".indexOf(arrowChar) > -1) {\n                    // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take\n                    // two optional labels. E.g. the right-point arrow syntax is\n                    // really:  @>{optional label}>{optional label}>\n                    // Collect parseNodes into labels.\n                    for(var labelNum = 0; labelNum < 2; labelNum++){\n                        var inLabel = true;\n                        for(var k = j + 1; k < rowNodes.length; k++){\n                            if (isLabelEnd(rowNodes[k], arrowChar)) {\n                                inLabel = false;\n                                j = k;\n                                break;\n                            }\n                            if (isStartOfArrow(rowNodes[k])) {\n                                throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[k]);\n                            }\n                            labels[labelNum].body.push(rowNodes[k]);\n                        }\n                        if (inLabel) {\n                            // isLabelEnd never returned a true.\n                            throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[j]);\n                        }\n                    }\n                } else {\n                    throw new ParseError('Expected one of \"<>AV=|.\" after @', rowNodes[j]);\n                } // Now join the arrow to its labels.\n                var arrow = cdArrow(arrowChar, labels, parser); // Wrap the arrow in  ParseNode<\"styling\">.\n                // This is done to match parseArray() behavior.\n                var wrappedArrow = {\n                    type: \"styling\",\n                    body: [\n                        arrow\n                    ],\n                    mode: \"math\",\n                    style: \"display\" // CD is always displaystyle.\n                };\n                row.push(wrappedArrow); // In CD's syntax, cells are implicit. That is, everything that\n                // is not an arrow gets collected into a cell. So create an empty\n                // cell now. It will collect upcoming parseNodes.\n                cell = newCell();\n            }\n        }\n        if (i % 2 === 0) {\n            // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell\n            // The last cell is not yet pushed into `row`, so:\n            row.push(cell);\n        } else {\n            // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow\n            // Remove the empty cell that was placed at the beginning of `row`.\n            row.shift();\n        }\n        row = [];\n        body.push(row);\n    } // End row group\n    parser.gullet.endGroup(); // End array group defining \\\\\n    parser.gullet.endGroup(); // define column separation.\n    var cols = new Array(body[0].length).fill({\n        type: \"align\",\n        align: \"c\",\n        pregap: 0.25,\n        // CD package sets \\enskip between columns.\n        postgap: 0.25 // So pre and post each get half an \\enskip, i.e. 0.25em.\n    });\n    return {\n        type: \"array\",\n        mode: \"math\",\n        body,\n        arraystretch: 1,\n        addJot: true,\n        rowGaps: [\n            null\n        ],\n        cols,\n        colSeparationType: \"CD\",\n        hLinesBeforeRow: new Array(body.length + 1).fill([])\n    };\n} // The functions below are not available for general use.\n// They are here only for internal use by the {CD} environment in placing labels\n// next to vertical arrows.\n// We don't need any such functions for horizontal arrows because we can reuse\n// the functionality that already exists for extensible arrows.\ndefineFunction({\n    type: \"cdlabel\",\n    names: [\n        \"\\\\\\\\cdleft\",\n        \"\\\\\\\\cdright\"\n    ],\n    props: {\n        numArgs: 1\n    },\n    handler (_ref, args) {\n        var { parser, funcName } = _ref;\n        return {\n            type: \"cdlabel\",\n            mode: parser.mode,\n            side: funcName.slice(4),\n            label: args[0]\n        };\n    },\n    htmlBuilder (group, options) {\n        var newOptions = options.havingStyle(options.style.sup());\n        var label = buildCommon.wrapFragment(buildGroup$1(group.label, newOptions, options), options);\n        label.classes.push(\"cd-label-\" + group.side);\n        label.style.bottom = makeEm(0.8 - label.depth); // Zero out label height & depth, so vertical align of arrow is set\n        // by the arrow height, not by the label.\n        label.height = 0;\n        label.depth = 0;\n        return label;\n    },\n    mathmlBuilder (group, options) {\n        var label = new mathMLTree.MathNode(\"mrow\", [\n            buildGroup(group.label, options)\n        ]);\n        label = new mathMLTree.MathNode(\"mpadded\", [\n            label\n        ]);\n        label.setAttribute(\"width\", \"0\");\n        if (group.side === \"left\") {\n            label.setAttribute(\"lspace\", \"-1width\");\n        } // We have to guess at vertical alignment. We know the arrow is 1.8em tall,\n        // But we don't know the height or depth of the label.\n        label.setAttribute(\"voffset\", \"0.7em\");\n        label = new mathMLTree.MathNode(\"mstyle\", [\n            label\n        ]);\n        label.setAttribute(\"displaystyle\", \"false\");\n        label.setAttribute(\"scriptlevel\", \"1\");\n        return label;\n    }\n});\ndefineFunction({\n    type: \"cdlabelparent\",\n    names: [\n        \"\\\\\\\\cdparent\"\n    ],\n    props: {\n        numArgs: 1\n    },\n    handler (_ref2, args) {\n        var { parser } = _ref2;\n        return {\n            type: \"cdlabelparent\",\n            mode: parser.mode,\n            fragment: args[0]\n        };\n    },\n    htmlBuilder (group, options) {\n        // Wrap the vertical arrow and its labels.\n        // The parent gets position: relative. The child gets position: absolute.\n        // So CSS can locate the label correctly.\n        var parent = buildCommon.wrapFragment(buildGroup$1(group.fragment, options), options);\n        parent.classes.push(\"cd-vert-arrow\");\n        return parent;\n    },\n    mathmlBuilder (group, options) {\n        return new mathMLTree.MathNode(\"mrow\", [\n            buildGroup(group.fragment, options)\n        ]);\n    }\n});\n// {123} and converts into symbol with code 123.  It is used by the *macro*\n// \\char defined in macros.js.\ndefineFunction({\n    type: \"textord\",\n    names: [\n        \"\\\\@char\"\n    ],\n    props: {\n        numArgs: 1,\n        allowedInText: true\n    },\n    handler (_ref, args) {\n        var { parser } = _ref;\n        var arg = assertNodeType(args[0], \"ordgroup\");\n        var group = arg.body;\n        var number = \"\";\n        for(var i = 0; i < group.length; i++){\n            var node = assertNodeType(group[i], \"textord\");\n            number += node.text;\n        }\n        var code = parseInt(number);\n        var text;\n        if (isNaN(code)) {\n            throw new ParseError(\"\\\\@char has non-numeric argument \" + number); // If we drop IE support, the following code could be replaced with\n        // text = String.fromCodePoint(code)\n        } else if (code < 0 || code >= 0x10ffff) {\n            throw new ParseError(\"\\\\@char with invalid code point \" + number);\n        } else if (code <= 0xffff) {\n            text = String.fromCharCode(code);\n        } else {\n            // Astral code point; split into surrogate halves\n            code -= 0x10000;\n            text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00);\n        }\n        return {\n            type: \"textord\",\n            mode: parser.mode,\n            text: text\n        };\n    }\n});\nvar htmlBuilder$8 = (group, options)=>{\n    var elements = buildExpression$1(group.body, options.withColor(group.color), false); // \\color isn't supposed to affect the type of the elements it contains.\n    // To accomplish this, we wrap the results in a fragment, so the inner\n    // elements will be able to directly interact with their neighbors. For\n    // example, `\\color{red}{2 +} 3` has the same spacing as `2 + 3`\n    return buildCommon.makeFragment(elements);\n};\nvar mathmlBuilder$7 = (group, options)=>{\n    var inner = buildExpression(group.body, options.withColor(group.color));\n    var node = new mathMLTree.MathNode(\"mstyle\", inner);\n    node.setAttribute(\"mathcolor\", group.color);\n    return node;\n};\ndefineFunction({\n    type: \"color\",\n    names: [\n        \"\\\\textcolor\"\n    ],\n    props: {\n        numArgs: 2,\n        allowedInText: true,\n        argTypes: [\n            \"color\",\n            \"original\"\n        ]\n    },\n    handler (_ref, args) {\n        var { parser } = _ref;\n        var color = assertNodeType(args[0], \"color-token\").color;\n        var body = args[1];\n        return {\n            type: \"color\",\n            mode: parser.mode,\n            color,\n            body: ordargument(body)\n        };\n    },\n    htmlBuilder: htmlBuilder$8,\n    mathmlBuilder: mathmlBuilder$7\n});\ndefineFunction({\n    type: \"color\",\n    names: [\n        \"\\\\color\"\n    ],\n    props: {\n        numArgs: 1,\n        allowedInText: true,\n        argTypes: [\n            \"color\"\n        ]\n    },\n    handler (_ref2, args) {\n        var { parser, breakOnTokenText } = _ref2;\n        var color = assertNodeType(args[0], \"color-token\").color; // Set macro \\current@color in current namespace to store the current\n        // color, mimicking the behavior of color.sty.\n        // This is currently used just to correctly color a \\right\n        // that follows a \\color command.\n        parser.gullet.macros.set(\"\\\\current@color\", color); // Parse out the implicit body that should be colored.\n        var body = parser.parseExpression(true, breakOnTokenText);\n        return {\n            type: \"color\",\n            mode: parser.mode,\n            color,\n            body\n        };\n    },\n    htmlBuilder: htmlBuilder$8,\n    mathmlBuilder: mathmlBuilder$7\n});\n// Row breaks within tabular environments, and line breaks at top level\ndefineFunction({\n    type: \"cr\",\n    names: [\n        \"\\\\\\\\\"\n    ],\n    props: {\n        numArgs: 0,\n        numOptionalArgs: 0,\n        allowedInText: true\n    },\n    handler (_ref, args, optArgs) {\n        var { parser } = _ref;\n        var size = parser.gullet.future().text === \"[\" ? parser.parseSizeGroup(true) : null;\n        var newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior(\"newLineInDisplayMode\", \"In LaTeX, \\\\\\\\ or \\\\newline \" + \"does nothing in display mode\");\n        return {\n            type: \"cr\",\n            mode: parser.mode,\n            newLine,\n            size: size && assertNodeType(size, \"size\").value\n        };\n    },\n    // The following builders are called only at the top level,\n    // not within tabular/array environments.\n    htmlBuilder (group, options) {\n        var span = buildCommon.makeSpan([\n            \"mspace\"\n        ], [], options);\n        if (group.newLine) {\n            span.classes.push(\"newline\");\n            if (group.size) {\n                span.style.marginTop = makeEm(calculateSize(group.size, options));\n            }\n        }\n        return span;\n    },\n    mathmlBuilder (group, options) {\n        var node = new mathMLTree.MathNode(\"mspace\");\n        if (group.newLine) {\n            node.setAttribute(\"linebreak\", \"newline\");\n            if (group.size) {\n                node.setAttribute(\"height\", makeEm(calculateSize(group.size, options)));\n            }\n        }\n        return node;\n    }\n});\nvar globalMap = {\n    \"\\\\global\": \"\\\\global\",\n    \"\\\\long\": \"\\\\\\\\globallong\",\n    \"\\\\\\\\globallong\": \"\\\\\\\\globallong\",\n    \"\\\\def\": \"\\\\gdef\",\n    \"\\\\gdef\": \"\\\\gdef\",\n    \"\\\\edef\": \"\\\\xdef\",\n    \"\\\\xdef\": \"\\\\xdef\",\n    \"\\\\let\": \"\\\\\\\\globallet\",\n    \"\\\\futurelet\": \"\\\\\\\\globalfuture\"\n};\nvar checkControlSequence = (tok)=>{\n    var name = tok.text;\n    if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n        throw new ParseError(\"Expected a control sequence\", tok);\n    }\n    return name;\n};\nvar getRHS = (parser)=>{\n    var tok = parser.gullet.popToken();\n    if (tok.text === \"=\") {\n        // consume optional equals\n        tok = parser.gullet.popToken();\n        if (tok.text === \" \") {\n            // consume one optional space\n            tok = parser.gullet.popToken();\n        }\n    }\n    return tok;\n};\nvar letCommand = (parser, name, tok, global)=>{\n    var macro = parser.gullet.macros.get(tok.text);\n    if (macro == null) {\n        // don't expand it later even if a macro with the same name is defined\n        // e.g., \\let\\foo=\\frac \\def\\frac{\\relax} \\frac12\n        tok.noexpand = true;\n        macro = {\n            tokens: [\n                tok\n            ],\n            numArgs: 0,\n            // reproduce the same behavior in expansion\n            unexpandable: !parser.gullet.isExpandable(tok.text)\n        };\n    }\n    parser.gullet.macros.set(name, macro, global);\n}; // <assignment> -> <non-macro assignment>|<macro assignment>\n// <non-macro assignment> -> <simple assignment>|\\global<non-macro assignment>\n// <macro assignment> -> <definition>|<prefix><macro assignment>\n// <prefix> -> \\global|\\long|\\outer\ndefineFunction({\n    type: \"internal\",\n    names: [\n        \"\\\\global\",\n        \"\\\\long\",\n        \"\\\\\\\\globallong\" // can’t be entered directly\n    ],\n    props: {\n        numArgs: 0,\n        allowedInText: true\n    },\n    handler (_ref) {\n        var { parser, funcName } = _ref;\n        parser.consumeSpaces();\n        var token = parser.fetch();\n        if (globalMap[token.text]) {\n            // KaTeX doesn't have \\par, so ignore \\long\n            if (funcName === \"\\\\global\" || funcName === \"\\\\\\\\globallong\") {\n                token.text = globalMap[token.text];\n            }\n            return assertNodeType(parser.parseFunction(), \"internal\");\n        }\n        throw new ParseError(\"Invalid token after macro prefix\", token);\n    }\n}); // Basic support for macro definitions: \\def, \\gdef, \\edef, \\xdef\n// <definition> -> <def><control sequence><definition text>\n// <def> -> \\def|\\gdef|\\edef|\\xdef\n// <definition text> -> <parameter text><left brace><balanced text><right brace>\ndefineFunction({\n    type: \"internal\",\n    names: [\n        \"\\\\def\",\n        \"\\\\gdef\",\n        \"\\\\edef\",\n        \"\\\\xdef\"\n    ],\n    props: {\n        numArgs: 0,\n        allowedInText: true,\n        primitive: true\n    },\n    handler (_ref2) {\n        var { parser, funcName } = _ref2;\n        var tok = parser.gullet.popToken();\n        var name = tok.text;\n        if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n            throw new ParseError(\"Expected a control sequence\", tok);\n        }\n        var numArgs = 0;\n        var insert;\n        var delimiters = [\n            []\n        ]; // <parameter text> contains no braces\n        while(parser.gullet.future().text !== \"{\"){\n            tok = parser.gullet.popToken();\n            if (tok.text === \"#\") {\n                // If the very last character of the <parameter text> is #, so that\n                // this # is immediately followed by {, TeX will behave as if the {\n                // had been inserted at the right end of both the parameter text\n                // and the replacement text.\n                if (parser.gullet.future().text === \"{\") {\n                    insert = parser.gullet.future();\n                    delimiters[numArgs].push(\"{\");\n                    break;\n                } // A parameter, the first appearance of # must be followed by 1,\n                // the next by 2, and so on; up to nine #’s are allowed\n                tok = parser.gullet.popToken();\n                if (!/^[1-9]$/.test(tok.text)) {\n                    throw new ParseError('Invalid argument number \"' + tok.text + '\"');\n                }\n                if (parseInt(tok.text) !== numArgs + 1) {\n                    throw new ParseError('Argument number \"' + tok.text + '\" out of order');\n                }\n                numArgs++;\n                delimiters.push([]);\n            } else if (tok.text === \"EOF\") {\n                throw new ParseError(\"Expected a macro definition\");\n            } else {\n                delimiters[numArgs].push(tok.text);\n            }\n        } // replacement text, enclosed in '{' and '}' and properly nested\n        var { tokens } = parser.gullet.consumeArg();\n        if (insert) {\n            tokens.unshift(insert);\n        }\n        if (funcName === \"\\\\edef\" || funcName === \"\\\\xdef\") {\n            tokens = parser.gullet.expandTokens(tokens);\n            tokens.reverse(); // to fit in with stack order\n        } // Final arg is the expansion of the macro\n        parser.gullet.macros.set(name, {\n            tokens,\n            numArgs,\n            delimiters\n        }, funcName === globalMap[funcName]);\n        return {\n            type: \"internal\",\n            mode: parser.mode\n        };\n    }\n}); // <simple assignment> -> <let assignment>\n// <let assignment> -> \\futurelet<control sequence><token><token>\n//     | \\let<control sequence><equals><one optional space><token>\n// <equals> -> <optional spaces>|<optional spaces>=\ndefineFunction({\n    type: \"internal\",\n    names: [\n        \"\\\\let\",\n        \"\\\\\\\\globallet\" // can’t be entered directly\n    ],\n    props: {\n        numArgs: 0,\n        allowedInText: true,\n        primitive: true\n    },\n    handler (_ref3) {\n        var { parser, funcName } = _ref3;\n        var name = checkControlSequence(parser.gullet.popToken());\n        parser.gullet.consumeSpaces();\n        var tok = getRHS(parser);\n        letCommand(parser, name, tok, funcName === \"\\\\\\\\globallet\");\n        return {\n            type: \"internal\",\n            mode: parser.mode\n        };\n    }\n}); // ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf\ndefineFunction({\n    type: \"internal\",\n    names: [\n        \"\\\\futurelet\",\n        \"\\\\\\\\globalfuture\" // can’t be entered directly\n    ],\n    props: {\n        numArgs: 0,\n        allowedInText: true,\n        primitive: true\n    },\n    handler (_ref4) {\n        var { parser, funcName } = _ref4;\n        var name = checkControlSequence(parser.gullet.popToken());\n        var middle = parser.gullet.popToken();\n        var tok = parser.gullet.popToken();\n        letCommand(parser, name, tok, funcName === \"\\\\\\\\globalfuture\");\n        parser.gullet.pushToken(tok);\n        parser.gullet.pushToken(middle);\n        return {\n            type: \"internal\",\n            mode: parser.mode\n        };\n    }\n});\n/**\n * This file deals with creating delimiters of various sizes. The TeXbook\n * discusses these routines on page 441-442, in the \"Another subroutine sets box\n * x to a specified variable delimiter\" paragraph.\n *\n * There are three main routines here. `makeSmallDelim` makes a delimiter in the\n * normal font, but in either text, script, or scriptscript style.\n * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,\n * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of\n * smaller pieces that are stacked on top of one another.\n *\n * The functions take a parameter `center`, which determines if the delimiter\n * should be centered around the axis.\n *\n * Then, there are three exposed functions. `sizedDelim` makes a delimiter in\n * one of the given sizes. This is used for things like `\\bigl`.\n * `customSizedDelim` makes a delimiter with a given total height+depth. It is\n * called in places like `\\sqrt`. `leftRightDelim` makes an appropriate\n * delimiter which surrounds an expression of a given height an depth. It is\n * used in `\\left` and `\\right`.\n */ /**\n * Get the metrics for a given symbol and font, after transformation (i.e.\n * after following replacement from symbols.js)\n */ var getMetrics = function getMetrics(symbol, font, mode) {\n    var replace = symbols.math[symbol] && symbols.math[symbol].replace;\n    var metrics = getCharacterMetrics(replace || symbol, font, mode);\n    if (!metrics) {\n        throw new Error(\"Unsupported symbol \" + symbol + \" and font size \" + font + \".\");\n    }\n    return metrics;\n};\n/**\n * Puts a delimiter span in a given style, and adds appropriate height, depth,\n * and maxFontSizes.\n */ var styleWrap = function styleWrap(delim, toStyle, options, classes) {\n    var newOptions = options.havingBaseStyle(toStyle);\n    var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [\n        delim\n    ], options);\n    var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;\n    span.height *= delimSizeMultiplier;\n    span.depth *= delimSizeMultiplier;\n    span.maxFontSize = newOptions.sizeMultiplier;\n    return span;\n};\nvar centerSpan = function centerSpan(span, options, style) {\n    var newOptions = options.havingBaseStyle(style);\n    var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;\n    span.classes.push(\"delimcenter\");\n    span.style.top = makeEm(shift);\n    span.height -= shift;\n    span.depth += shift;\n};\n/**\n * Makes a small delimiter. This is a delimiter that comes in the Main-Regular\n * font, but is restyled to either be in textstyle, scriptstyle, or\n * scriptscriptstyle.\n */ var makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) {\n    var text = buildCommon.makeSymbol(delim, \"Main-Regular\", mode, options);\n    var span = styleWrap(text, style, options, classes);\n    if (center) {\n        centerSpan(span, options, style);\n    }\n    return span;\n};\n/**\n * Builds a symbol in the given font size (note size is an integer)\n */ var mathrmSize = function mathrmSize(value, size, mode, options) {\n    return buildCommon.makeSymbol(value, \"Size\" + size + \"-Regular\", mode, options);\n};\n/**\n * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,\n * Size3, or Size4 fonts. It is always rendered in textstyle.\n */ var makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) {\n    var inner = mathrmSize(delim, size, mode, options);\n    var span = styleWrap(buildCommon.makeSpan([\n        \"delimsizing\",\n        \"size\" + size\n    ], [\n        inner\n    ], options), Style$1.TEXT, options, classes);\n    if (center) {\n        centerSpan(span, options, Style$1.TEXT);\n    }\n    return span;\n};\n/**\n * Make a span from a font glyph with the given offset and in the given font.\n * This is used in makeStackedDelim to make the stacking pieces for the delimiter.\n */ var makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) {\n    var sizeClass; // Apply the correct CSS class to choose the right font.\n    if (font === \"Size1-Regular\") {\n        sizeClass = \"delim-size1\";\n    } else /* if (font === \"Size4-Regular\") */ {\n        sizeClass = \"delim-size4\";\n    }\n    var corner = buildCommon.makeSpan([\n        \"delimsizinginner\",\n        sizeClass\n    ], [\n        buildCommon.makeSpan([], [\n            buildCommon.makeSymbol(symbol, font, mode)\n        ])\n    ]); // Since this will be passed into `makeVList` in the end, wrap the element\n    // in the appropriate tag that VList uses.\n    return {\n        type: \"elem\",\n        elem: corner\n    };\n};\nvar makeInner = function makeInner(ch, height, options) {\n    // Create a span with inline SVG for the inner part of a tall stacked delimiter.\n    var width = fontMetricsData[\"Size4-Regular\"][ch.charCodeAt(0)] ? fontMetricsData[\"Size4-Regular\"][ch.charCodeAt(0)][4] : fontMetricsData[\"Size1-Regular\"][ch.charCodeAt(0)][4];\n    var path = new PathNode(\"inner\", innerPath(ch, Math.round(1000 * height)));\n    var svgNode = new SvgNode([\n        path\n    ], {\n        \"width\": makeEm(width),\n        \"height\": makeEm(height),\n        // Override CSS rule `.katex svg { width: 100% }`\n        \"style\": \"width:\" + makeEm(width),\n        \"viewBox\": \"0 0 \" + 1000 * width + \" \" + Math.round(1000 * height),\n        \"preserveAspectRatio\": \"xMinYMin\"\n    });\n    var span = buildCommon.makeSvgSpan([], [\n        svgNode\n    ], options);\n    span.height = height;\n    span.style.height = makeEm(height);\n    span.style.width = makeEm(width);\n    return {\n        type: \"elem\",\n        elem: span\n    };\n}; // Helpers for makeStackedDelim\nvar lapInEms = 0.008;\nvar lap = {\n    type: \"kern\",\n    size: -1 * lapInEms\n};\nvar verts = [\n    \"|\",\n    \"\\\\lvert\",\n    \"\\\\rvert\",\n    \"\\\\vert\"\n];\nvar doubleVerts = [\n    \"\\\\|\",\n    \"\\\\lVert\",\n    \"\\\\rVert\",\n    \"\\\\Vert\"\n];\n/**\n * Make a stacked delimiter out of a given delimiter, with the total height at\n * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.\n */ var makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {\n    // There are four parts, the top, an optional middle, a repeated part, and a\n    // bottom.\n    var top;\n    var middle;\n    var repeat;\n    var bottom;\n    var svgLabel = \"\";\n    var viewBoxWidth = 0;\n    top = repeat = bottom = delim;\n    middle = null; // Also keep track of what font the delimiters are in\n    var font = \"Size1-Regular\"; // We set the parts and font based on the symbol. Note that we use\n    // '\\u23d0' instead of '|' and '\\u2016' instead of '\\\\|' for the\n    // repeats of the arrows\n    if (delim === \"\\\\uparrow\") {\n        repeat = bottom = \"⏐\";\n    } else if (delim === \"\\\\Uparrow\") {\n        repeat = bottom = \"‖\";\n    } else if (delim === \"\\\\downarrow\") {\n        top = repeat = \"⏐\";\n    } else if (delim === \"\\\\Downarrow\") {\n        top = repeat = \"‖\";\n    } else if (delim === \"\\\\updownarrow\") {\n        top = \"\\\\uparrow\";\n        repeat = \"⏐\";\n        bottom = \"\\\\downarrow\";\n    } else if (delim === \"\\\\Updownarrow\") {\n        top = \"\\\\Uparrow\";\n        repeat = \"‖\";\n        bottom = \"\\\\Downarrow\";\n    } else if (utils.contains(verts, delim)) {\n        repeat = \"∣\";\n        svgLabel = \"vert\";\n        viewBoxWidth = 333;\n    } else if (utils.contains(doubleVerts, delim)) {\n        repeat = \"∥\";\n        svgLabel = \"doublevert\";\n        viewBoxWidth = 556;\n    } else if (delim === \"[\" || delim === \"\\\\lbrack\") {\n        top = \"⎡\";\n        repeat = \"⎢\";\n        bottom = \"⎣\";\n        font = \"Size4-Regular\";\n        svgLabel = \"lbrack\";\n        viewBoxWidth = 667;\n    } else if (delim === \"]\" || delim === \"\\\\rbrack\") {\n        top = \"⎤\";\n        repeat = \"⎥\";\n        bottom = \"⎦\";\n        font = \"Size4-Regular\";\n        svgLabel = \"rbrack\";\n        viewBoxWidth = 667;\n    } else if (delim === \"\\\\lfloor\" || delim === \"⌊\") {\n        repeat = top = \"⎢\";\n        bottom = \"⎣\";\n        font = \"Size4-Regular\";\n        svgLabel = \"lfloor\";\n        viewBoxWidth = 667;\n    } else if (delim === \"\\\\lceil\" || delim === \"⌈\") {\n        top = \"⎡\";\n        repeat = bottom = \"⎢\";\n        font = \"Size4-Regular\";\n        svgLabel = \"lceil\";\n        viewBoxWidth = 667;\n    } else if (delim === \"\\\\rfloor\" || delim === \"⌋\") {\n        repeat = top = \"⎥\";\n        bottom = \"⎦\";\n        font = \"Size4-Regular\";\n        svgLabel = \"rfloor\";\n        viewBoxWidth = 667;\n    } else if (delim === \"\\\\rceil\" || delim === \"⌉\") {\n        top = \"⎤\";\n        repeat = bottom = \"⎥\";\n        font = \"Size4-Regular\";\n        svgLabel = \"rceil\";\n        viewBoxWidth = 667;\n    } else if (delim === \"(\" || delim === \"\\\\lparen\") {\n        top = \"⎛\";\n        repeat = \"⎜\";\n        bottom = \"⎝\";\n        font = \"Size4-Regular\";\n        svgLabel = \"lparen\";\n        viewBoxWidth = 875;\n    } else if (delim === \")\" || delim === \"\\\\rparen\") {\n        top = \"⎞\";\n        repeat = \"⎟\";\n        bottom = \"⎠\";\n        font = \"Size4-Regular\";\n        svgLabel = \"rparen\";\n        viewBoxWidth = 875;\n    } else if (delim === \"\\\\{\" || delim === \"\\\\lbrace\") {\n        top = \"⎧\";\n        middle = \"⎨\";\n        bottom = \"⎩\";\n        repeat = \"⎪\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\}\" || delim === \"\\\\rbrace\") {\n        top = \"⎫\";\n        middle = \"⎬\";\n        bottom = \"⎭\";\n        repeat = \"⎪\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\lgroup\" || delim === \"⟮\") {\n        top = \"⎧\";\n        bottom = \"⎩\";\n        repeat = \"⎪\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\rgroup\" || delim === \"⟯\") {\n        top = \"⎫\";\n        bottom = \"⎭\";\n        repeat = \"⎪\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\lmoustache\" || delim === \"⎰\") {\n        top = \"⎧\";\n        bottom = \"⎭\";\n        repeat = \"⎪\";\n        font = \"Size4-Regular\";\n    } else if (delim === \"\\\\rmoustache\" || delim === \"⎱\") {\n        top = \"⎫\";\n        bottom = \"⎩\";\n        repeat = \"⎪\";\n        font = \"Size4-Regular\";\n    } // Get the metrics of the four sections\n    var topMetrics = getMetrics(top, font, mode);\n    var topHeightTotal = topMetrics.height + topMetrics.depth;\n    var repeatMetrics = getMetrics(repeat, font, mode);\n    var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;\n    var bottomMetrics = getMetrics(bottom, font, mode);\n    var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;\n    var middleHeightTotal = 0;\n    var middleFactor = 1;\n    if (middle !== null) {\n        var middleMetrics = getMetrics(middle, font, mode);\n        middleHeightTotal = middleMetrics.height + middleMetrics.depth;\n        middleFactor = 2; // repeat symmetrically above and below middle\n    } // Calculate the minimal height that the delimiter can have.\n    // It is at least the size of the top, bottom, and optional middle combined.\n    var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need\n    var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols\n    var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note\n    // that in this context, \"center\" means that the delimiter should be\n    // centered around the axis in the current style, while normally it is\n    // centered around the axis in textstyle.\n    var axisHeight = options.fontMetrics().axisHeight;\n    if (center) {\n        axisHeight *= options.sizeMultiplier;\n    } // Calculate the depth\n    var depth = realHeightTotal / 2 - axisHeight; // Now, we start building the pieces that will go into the vlist\n    // Keep a list of the pieces of the stacked delimiter\n    var stack = [];\n    if (svgLabel.length > 0) {\n        // Instead of stacking glyphs, create a single SVG.\n        // This evades browser problems with imprecise positioning of spans.\n        var midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal;\n        var viewBoxHeight = Math.round(realHeightTotal * 1000);\n        var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000));\n        var path = new PathNode(svgLabel, pathStr);\n        var width = (viewBoxWidth / 1000).toFixed(3) + \"em\";\n        var height = (viewBoxHeight / 1000).toFixed(3) + \"em\";\n        var svg = new SvgNode([\n            path\n        ], {\n            \"width\": width,\n            \"height\": height,\n            \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight\n        });\n        var wrapper = buildCommon.makeSvgSpan([], [\n            svg\n        ], options);\n        wrapper.height = viewBoxHeight / 1000;\n        wrapper.style.width = width;\n        wrapper.style.height = height;\n        stack.push({\n            type: \"elem\",\n            elem: wrapper\n        });\n    } else {\n        // Stack glyphs\n        // Start by adding the bottom symbol\n        stack.push(makeGlyphSpan(bottom, font, mode));\n        stack.push(lap); // overlap\n        if (middle === null) {\n            // The middle section will be an SVG. Make it an extra 0.016em tall.\n            // We'll overlap by 0.008em at top and bottom.\n            var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms;\n            stack.push(makeInner(repeat, innerHeight, options));\n        } else {\n            // When there is a middle bit, we need the middle part and two repeated\n            // sections\n            var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms;\n            stack.push(makeInner(repeat, _innerHeight, options)); // Now insert the middle of the brace.\n            stack.push(lap);\n            stack.push(makeGlyphSpan(middle, font, mode));\n            stack.push(lap);\n            stack.push(makeInner(repeat, _innerHeight, options));\n        } // Add the top symbol\n        stack.push(lap);\n        stack.push(makeGlyphSpan(top, font, mode));\n    } // Finally, build the vlist\n    var newOptions = options.havingBaseStyle(Style$1.TEXT);\n    var inner = buildCommon.makeVList({\n        positionType: \"bottom\",\n        positionData: depth,\n        children: stack\n    }, newOptions);\n    return styleWrap(buildCommon.makeSpan([\n        \"delimsizing\",\n        \"mult\"\n    ], [\n        inner\n    ], newOptions), Style$1.TEXT, options, classes);\n}; // All surds have 0.08em padding above the vinculum inside the SVG.\n// That keeps browser span height rounding error from pinching the line.\nvar vbPad = 80; // padding above the surd, measured inside the viewBox.\nvar emPad = 0.08; // padding, in ems, measured in the document.\nvar sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraVinculum, options) {\n    var path = sqrtPath(sqrtName, extraVinculum, viewBoxHeight);\n    var pathNode = new PathNode(sqrtName, path);\n    var svg = new SvgNode([\n        pathNode\n    ], {\n        // Note: 1000:1 ratio of viewBox to document em width.\n        \"width\": \"400em\",\n        \"height\": makeEm(height),\n        \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n        \"preserveAspectRatio\": \"xMinYMin slice\"\n    });\n    return buildCommon.makeSvgSpan([\n        \"hide-tail\"\n    ], [\n        svg\n    ], options);\n};\n/**\n * Make a sqrt image of the given height,\n */ var makeSqrtImage = function makeSqrtImage(height, options) {\n    // Define a newOptions that removes the effect of size changes such as \\Huge.\n    // We don't pick different a height surd for \\Huge. For it, we scale up.\n    var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds.\n    var delim = traverseSequence(\"\\\\surd\", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);\n    var sizeMultiplier = newOptions.sizeMultiplier; // default\n    // The standard sqrt SVGs each have a 0.04em thick vinculum.\n    // If Settings.minRuleThickness is larger than that, we add extraVinculum.\n    var extraVinculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol.\n    var span;\n    var spanHeight = 0;\n    var texHeight = 0;\n    var viewBoxHeight = 0;\n    var advanceWidth; // We create viewBoxes with 80 units of \"padding\" above each surd.\n    // Then browser rounding error on the parent span height will not\n    // encroach on the ink of the vinculum. But that padding is not\n    // included in the TeX-like `height` used for calculation of\n    // vertical alignment. So texHeight = span.height < span.style.height.\n    if (delim.type === \"small\") {\n        // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.\n        // 1000 unit normal glyph height.\n        viewBoxHeight = 1000 + 1000 * extraVinculum + vbPad;\n        if (height < 1.0) {\n            sizeMultiplier = 1.0; // mimic a \\textfont radical\n        } else if (height < 1.4) {\n            sizeMultiplier = 0.7; // mimic a \\scriptfont radical\n        }\n        spanHeight = (1.0 + extraVinculum + emPad) / sizeMultiplier;\n        texHeight = (1.00 + extraVinculum) / sizeMultiplier;\n        span = sqrtSvg(\"sqrtMain\", spanHeight, viewBoxHeight, extraVinculum, options);\n        span.style.minWidth = \"0.853em\";\n        advanceWidth = 0.833 / sizeMultiplier; // from the font.\n    } else if (delim.type === \"large\") {\n        // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.\n        viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size];\n        texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier;\n        spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier;\n        span = sqrtSvg(\"sqrtSize\" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options);\n        span.style.minWidth = \"1.02em\";\n        advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font.\n    } else {\n        // Tall sqrt. In TeX, this would be stacked using multiple glyphs.\n        // We'll use a single SVG to accomplish the same thing.\n        spanHeight = height + extraVinculum + emPad;\n        texHeight = height + extraVinculum;\n        viewBoxHeight = Math.floor(1000 * height + extraVinculum) + vbPad;\n        span = sqrtSvg(\"sqrtTall\", spanHeight, viewBoxHeight, extraVinculum, options);\n        span.style.minWidth = \"0.742em\";\n        advanceWidth = 1.056;\n    }\n    span.height = texHeight;\n    span.style.height = makeEm(spanHeight);\n    return {\n        span,\n        advanceWidth,\n        // Calculate the actual line width.\n        // This actually should depend on the chosen font -- e.g. \\boldmath\n        // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and\n        // have thicker rules.\n        ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier\n    };\n}; // There are three kinds of delimiters, delimiters that stack when they become\n// too large\nvar stackLargeDelimiters = [\n    \"(\",\n    \"\\\\lparen\",\n    \")\",\n    \"\\\\rparen\",\n    \"[\",\n    \"\\\\lbrack\",\n    \"]\",\n    \"\\\\rbrack\",\n    \"\\\\{\",\n    \"\\\\lbrace\",\n    \"\\\\}\",\n    \"\\\\rbrace\",\n    \"\\\\lfloor\",\n    \"\\\\rfloor\",\n    \"⌊\",\n    \"⌋\",\n    \"\\\\lceil\",\n    \"\\\\rceil\",\n    \"⌈\",\n    \"⌉\",\n    \"\\\\surd\"\n]; // delimiters that always stack\nvar stackAlwaysDelimiters = [\n    \"\\\\uparrow\",\n    \"\\\\downarrow\",\n    \"\\\\updownarrow\",\n    \"\\\\Uparrow\",\n    \"\\\\Downarrow\",\n    \"\\\\Updownarrow\",\n    \"|\",\n    \"\\\\|\",\n    \"\\\\vert\",\n    \"\\\\Vert\",\n    \"\\\\lvert\",\n    \"\\\\rvert\",\n    \"\\\\lVert\",\n    \"\\\\rVert\",\n    \"\\\\lgroup\",\n    \"\\\\rgroup\",\n    \"⟮\",\n    \"⟯\",\n    \"\\\\lmoustache\",\n    \"\\\\rmoustache\",\n    \"⎰\",\n    \"⎱\"\n]; // and delimiters that never stack\nvar stackNeverDelimiters = [\n    \"<\",\n    \">\",\n    \"\\\\langle\",\n    \"\\\\rangle\",\n    \"/\",\n    \"\\\\backslash\",\n    \"\\\\lt\",\n    \"\\\\gt\"\n]; // Metrics of the different sizes. Found by looking at TeX's output of\n// $\\bigl| // \\Bigl| \\biggl| \\Biggl| \\showlists$\n// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.\nvar sizeToMaxHeight = [\n    0,\n    1.2,\n    1.8,\n    2.4,\n    3.0\n];\n/**\n * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.\n */ var makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) {\n    // < and > turn into \\langle and \\rangle in delimiters\n    if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"⟨\") {\n        delim = \"\\\\langle\";\n    } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"⟩\") {\n        delim = \"\\\\rangle\";\n    } // Sized delimiters are never centered.\n    if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) {\n        return makeLargeDelim(delim, size, false, options, mode, classes);\n    } else if (utils.contains(stackAlwaysDelimiters, delim)) {\n        return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);\n    } else {\n        throw new ParseError(\"Illegal delimiter: '\" + delim + \"'\");\n    }\n};\n/**\n * There are three different sequences of delimiter sizes that the delimiters\n * follow depending on the kind of delimiter. This is used when creating custom\n * sized delimiters to decide whether to create a small, large, or stacked\n * delimiter.\n *\n * In real TeX, these sequences aren't explicitly defined, but are instead\n * defined inside the font metrics. Since there are only three sequences that\n * are possible for the delimiters that TeX defines, it is easier to just encode\n * them explicitly here.\n */ // Delimiters that never stack try small delimiters and large delimiters only\nvar stackNeverDelimiterSequence = [\n    {\n        type: \"small\",\n        style: Style$1.SCRIPTSCRIPT\n    },\n    {\n        type: \"small\",\n        style: Style$1.SCRIPT\n    },\n    {\n        type: \"small\",\n        style: Style$1.TEXT\n    },\n    {\n        type: \"large\",\n        size: 1\n    },\n    {\n        type: \"large\",\n        size: 2\n    },\n    {\n        type: \"large\",\n        size: 3\n    },\n    {\n        type: \"large\",\n        size: 4\n    }\n]; // Delimiters that always stack try the small delimiters first, then stack\nvar stackAlwaysDelimiterSequence = [\n    {\n        type: \"small\",\n        style: Style$1.SCRIPTSCRIPT\n    },\n    {\n        type: \"small\",\n        style: Style$1.SCRIPT\n    },\n    {\n        type: \"small\",\n        style: Style$1.TEXT\n    },\n    {\n        type: \"stack\"\n    }\n]; // Delimiters that stack when large try the small and then large delimiters, and\n// stack afterwards\nvar stackLargeDelimiterSequence = [\n    {\n        type: \"small\",\n        style: Style$1.SCRIPTSCRIPT\n    },\n    {\n        type: \"small\",\n        style: Style$1.SCRIPT\n    },\n    {\n        type: \"small\",\n        style: Style$1.TEXT\n    },\n    {\n        type: \"large\",\n        size: 1\n    },\n    {\n        type: \"large\",\n        size: 2\n    },\n    {\n        type: \"large\",\n        size: 3\n    },\n    {\n        type: \"large\",\n        size: 4\n    },\n    {\n        type: \"stack\"\n    }\n];\n/**\n * Get the font used in a delimiter based on what kind of delimiter it is.\n * TODO(#963) Use more specific font family return type once that is introduced.\n */ var delimTypeToFont = function delimTypeToFont(type) {\n    if (type.type === \"small\") {\n        return \"Main-Regular\";\n    } else if (type.type === \"large\") {\n        return \"Size\" + type.size + \"-Regular\";\n    } else if (type.type === \"stack\") {\n        return \"Size4-Regular\";\n    } else {\n        throw new Error(\"Add support for delim type '\" + type.type + \"' here.\");\n    }\n};\n/**\n * Traverse a sequence of types of delimiters to decide what kind of delimiter\n * should be used to create a delimiter of the given height+depth.\n */ var traverseSequence = function traverseSequence(delim, height, sequence, options) {\n    // Here, we choose the index we should start at in the sequences. In smaller\n    // sizes (which correspond to larger numbers in style.size) we start earlier\n    // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts\n    // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2\n    var start = Math.min(2, 3 - options.style.size);\n    for(var i = start; i < sequence.length; i++){\n        if (sequence[i].type === \"stack\") {\n            break;\n        }\n        var metrics = getMetrics(delim, delimTypeToFont(sequence[i]), \"math\");\n        var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we\n        // account for the style change size.\n        if (sequence[i].type === \"small\") {\n            var newOptions = options.havingBaseStyle(sequence[i].style);\n            heightDepth *= newOptions.sizeMultiplier;\n        } // Check if the delimiter at this size works for the given height.\n        if (heightDepth > height) {\n            return sequence[i];\n        }\n    } // If we reached the end of the sequence, return the last sequence element.\n    return sequence[sequence.length - 1];\n};\n/**\n * Make a delimiter of a given height+depth, with optional centering. Here, we\n * traverse the sequences, and create a delimiter that the sequence tells us to.\n */ var makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) {\n    if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"⟨\") {\n        delim = \"\\\\langle\";\n    } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"⟩\") {\n        delim = \"\\\\rangle\";\n    } // Decide what sequence to use\n    var sequence;\n    if (utils.contains(stackNeverDelimiters, delim)) {\n        sequence = stackNeverDelimiterSequence;\n    } else if (utils.contains(stackLargeDelimiters, delim)) {\n        sequence = stackLargeDelimiterSequence;\n    } else {\n        sequence = stackAlwaysDelimiterSequence;\n    } // Look through the sequence\n    var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs.\n    // Depending on the sequence element we decided on, call the\n    // appropriate function.\n    if (delimType.type === \"small\") {\n        return makeSmallDelim(delim, delimType.style, center, options, mode, classes);\n    } else if (delimType.type === \"large\") {\n        return makeLargeDelim(delim, delimType.size, center, options, mode, classes);\n    } else /* if (delimType.type === \"stack\") */ {\n        return makeStackedDelim(delim, height, center, options, mode, classes);\n    }\n};\n/**\n * Make a delimiter for use with `\\left` and `\\right`, given a height and depth\n * of an expression that the delimiters surround.\n */ var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) {\n    // We always center \\left/\\right delimiters, so the axis is always shifted\n    var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right\n    var delimiterFactor = 901;\n    var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;\n    var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);\n    var totalHeight = Math.max(// 65536 per pt, or 655360 per em. So, the division here truncates in\n    // TeX but doesn't here, producing different results. If we wanted to\n    // exactly match TeX's calculation, we could do\n    //   Math.floor(655360 * maxDistFromAxis / 500) *\n    //    delimiterFactor / 655360\n    // (To see the difference, compare\n    //    x^{x^{\\left(\\rule{0.1em}{0.68em}\\right)}}\n    // in TeX and KaTeX)\n    maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total\n    // height\n    return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);\n};\nvar delimiter = {\n    sqrtImage: makeSqrtImage,\n    sizedDelim: makeSizedDelim,\n    sizeToMaxHeight: sizeToMaxHeight,\n    customSizedDelim: makeCustomSizedDelim,\n    leftRightDelim: makeLeftRightDelim\n};\n// Extra data needed for the delimiter handler down below\nvar delimiterSizes = {\n    \"\\\\bigl\": {\n        mclass: \"mopen\",\n        size: 1\n    },\n    \"\\\\Bigl\": {\n        mclass: \"mopen\",\n        size: 2\n    },\n    \"\\\\biggl\": {\n        mclass: \"mopen\",\n        size: 3\n    },\n    \"\\\\Biggl\": {\n        mclass: \"mopen\",\n        size: 4\n    },\n    \"\\\\bigr\": {\n        mclass: \"mclose\",\n        size: 1\n    },\n    \"\\\\Bigr\": {\n        mclass: \"mclose\",\n        size: 2\n    },\n    \"\\\\biggr\": {\n        mclass: \"mclose\",\n        size: 3\n    },\n    \"\\\\Biggr\": {\n        mclass: \"mclose\",\n        size: 4\n    },\n    \"\\\\bigm\": {\n        mclass: \"mrel\",\n        size: 1\n    },\n    \"\\\\Bigm\": {\n        mclass: \"mrel\",\n        size: 2\n    },\n    \"\\\\biggm\": {\n        mclass: \"mrel\",\n        size: 3\n    },\n    \"\\\\Biggm\": {\n        mclass: \"mrel\",\n        size: 4\n    },\n    \"\\\\big\": {\n        mclass: \"mord\",\n        size: 1\n    },\n    \"\\\\Big\": {\n        mclass: \"mord\",\n        size: 2\n    },\n    \"\\\\bigg\": {\n        mclass: \"mord\",\n        size: 3\n    },\n    \"\\\\Bigg\": {\n        mclass: \"mord\",\n        size: 4\n    }\n};\nvar delimiters = [\n    \"(\",\n    \"\\\\lparen\",\n    \")\",\n    \"\\\\rparen\",\n    \"[\",\n    \"\\\\lbrack\",\n    \"]\",\n    \"\\\\rbrack\",\n    \"\\\\{\",\n    \"\\\\lbrace\",\n    \"\\\\}\",\n    \"\\\\rbrace\",\n    \"\\\\lfloor\",\n    \"\\\\rfloor\",\n    \"⌊\",\n    \"⌋\",\n    \"\\\\lceil\",\n    \"\\\\rceil\",\n    \"⌈\",\n    \"⌉\",\n    \"<\",\n    \">\",\n    \"\\\\langle\",\n    \"⟨\",\n    \"\\\\rangle\",\n    \"⟩\",\n    \"\\\\lt\",\n    \"\\\\gt\",\n    \"\\\\lvert\",\n    \"\\\\rvert\",\n    \"\\\\lVert\",\n    \"\\\\rVert\",\n    \"\\\\lgroup\",\n    \"\\\\rgroup\",\n    \"⟮\",\n    \"⟯\",\n    \"\\\\lmoustache\",\n    \"\\\\rmoustache\",\n    \"⎰\",\n    \"⎱\",\n    \"/\",\n    \"\\\\backslash\",\n    \"|\",\n    \"\\\\vert\",\n    \"\\\\|\",\n    \"\\\\Vert\",\n    \"\\\\uparrow\",\n    \"\\\\Uparrow\",\n    \"\\\\downarrow\",\n    \"\\\\Downarrow\",\n    \"\\\\updownarrow\",\n    \"\\\\Updownarrow\",\n    \".\"\n];\n// Delimiter functions\nfunction checkDelimiter(delim, context) {\n    var symDelim = checkSymbolNodeType(delim);\n    if (symDelim && utils.contains(delimiters, symDelim.text)) {\n        return symDelim;\n    } else if (symDelim) {\n        throw new ParseError(\"Invalid delimiter '\" + symDelim.text + \"' after '\" + context.funcName + \"'\", delim);\n    } else {\n        throw new ParseError(\"Invalid delimiter type '\" + delim.type + \"'\", delim);\n    }\n}\ndefineFunction({\n    type: \"delimsizing\",\n    names: [\n        \"\\\\bigl\",\n        \"\\\\Bigl\",\n        \"\\\\biggl\",\n        \"\\\\Biggl\",\n        \"\\\\bigr\",\n        \"\\\\Bigr\",\n        \"\\\\biggr\",\n        \"\\\\Biggr\",\n        \"\\\\bigm\",\n        \"\\\\Bigm\",\n        \"\\\\biggm\",\n        \"\\\\Biggm\",\n        \"\\\\big\",\n        \"\\\\Big\",\n        \"\\\\bigg\",\n        \"\\\\Bigg\"\n    ],\n    props: {\n        numArgs: 1,\n        argTypes: [\n            \"primitive\"\n        ]\n    },\n    handler: (context, args)=>{\n        var delim = checkDelimiter(args[0], context);\n        return {\n            type: \"delimsizing\",\n            mode: context.parser.mode,\n            size: delimiterSizes[context.funcName].size,\n            mclass: delimiterSizes[context.funcName].mclass,\n            delim: delim.text\n        };\n    },\n    htmlBuilder: (group, options)=>{\n        if (group.delim === \".\") {\n            // Empty delimiters still count as elements, even though they don't\n            // show anything.\n            return buildCommon.makeSpan([\n                group.mclass\n            ]);\n        } // Use delimiter.sizedDelim to generate the delimiter.\n        return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [\n            group.mclass\n        ]);\n    },\n    mathmlBuilder: (group)=>{\n        var children = [];\n        if (group.delim !== \".\") {\n            children.push(makeText(group.delim, group.mode));\n        }\n        var node = new mathMLTree.MathNode(\"mo\", children);\n        if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n            // Only some of the delimsizing functions act as fences, and they\n            // return \"mopen\" or \"mclose\" mclass.\n            node.setAttribute(\"fence\", \"true\");\n        } else {\n            // Explicitly disable fencing if it's not a fence, to override the\n            // defaults.\n            node.setAttribute(\"fence\", \"false\");\n        }\n        node.setAttribute(\"stretchy\", \"true\");\n        var size = makeEm(delimiter.sizeToMaxHeight[group.size]);\n        node.setAttribute(\"minsize\", size);\n        node.setAttribute(\"maxsize\", size);\n        return node;\n    }\n});\nfunction assertParsed(group) {\n    if (!group.body) {\n        throw new Error(\"Bug: The leftright ParseNode wasn't fully parsed.\");\n    }\n}\ndefineFunction({\n    type: \"leftright-right\",\n    names: [\n        \"\\\\right\"\n    ],\n    props: {\n        numArgs: 1,\n        primitive: true\n    },\n    handler: (context, args)=>{\n        // \\left case below triggers parsing of \\right in\n        //   `const right = parser.parseFunction();`\n        // uses this return value.\n        var color = context.parser.gullet.macros.get(\"\\\\current@color\");\n        if (color && typeof color !== \"string\") {\n            throw new ParseError(\"\\\\current@color set to non-string in \\\\right\");\n        }\n        return {\n            type: \"leftright-right\",\n            mode: context.parser.mode,\n            delim: checkDelimiter(args[0], context).text,\n            color\n        };\n    }\n});\ndefineFunction({\n    type: \"leftright\",\n    names: [\n        \"\\\\left\"\n    ],\n    props: {\n        numArgs: 1,\n        primitive: true\n    },\n    handler: (context, args)=>{\n        var delim = checkDelimiter(args[0], context);\n        var parser = context.parser; // Parse out the implicit body\n        ++parser.leftrightDepth; // parseExpression stops before '\\\\right'\n        var body = parser.parseExpression(false);\n        --parser.leftrightDepth; // Check the next token\n        parser.expect(\"\\\\right\", false);\n        var right = assertNodeType(parser.parseFunction(), \"leftright-right\");\n        return {\n            type: \"leftright\",\n            mode: parser.mode,\n            body,\n            left: delim.text,\n            right: right.delim,\n            rightColor: right.color\n        };\n    },\n    htmlBuilder: (group, options)=>{\n        assertParsed(group); // Build the inner expression\n        var inner = buildExpression$1(group.body, options, true, [\n            \"mopen\",\n            \"mclose\"\n        ]);\n        var innerHeight = 0;\n        var innerDepth = 0;\n        var hadMiddle = false; // Calculate its height and depth\n        for(var i = 0; i < inner.length; i++){\n            // Property `isMiddle` not defined on `span`. See comment in\n            // \"middle\"'s htmlBuilder.\n            // $FlowFixMe\n            if (inner[i].isMiddle) {\n                hadMiddle = true;\n            } else {\n                innerHeight = Math.max(inner[i].height, innerHeight);\n                innerDepth = Math.max(inner[i].depth, innerDepth);\n            }\n        } // The size of delimiters is the same, regardless of what style we are\n        // in. Thus, to correctly calculate the size of delimiter we need around\n        // a group, we scale down the inner size based on the size.\n        innerHeight *= options.sizeMultiplier;\n        innerDepth *= options.sizeMultiplier;\n        var leftDelim;\n        if (group.left === \".\") {\n            // Empty delimiters in \\left and \\right make null delimiter spaces.\n            leftDelim = makeNullDelimiter(options, [\n                \"mopen\"\n            ]);\n        } else {\n            // Otherwise, use leftRightDelim to generate the correct sized\n            // delimiter.\n            leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, [\n                \"mopen\"\n            ]);\n        } // Add it to the beginning of the expression\n        inner.unshift(leftDelim); // Handle middle delimiters\n        if (hadMiddle) {\n            for(var _i = 1; _i < inner.length; _i++){\n                var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in\n                // \"middle\"'s htmlBuilder.\n                // $FlowFixMe\n                var isMiddle = middleDelim.isMiddle;\n                if (isMiddle) {\n                    // Apply the options that were active when \\middle was called\n                    inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []);\n                }\n            }\n        }\n        var rightDelim; // Same for the right delimiter, but using color specified by \\color\n        if (group.right === \".\") {\n            rightDelim = makeNullDelimiter(options, [\n                \"mclose\"\n            ]);\n        } else {\n            var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options;\n            rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, [\n                \"mclose\"\n            ]);\n        } // Add it to the end of the expression.\n        inner.push(rightDelim);\n        return buildCommon.makeSpan([\n            \"minner\"\n        ], inner, options);\n    },\n    mathmlBuilder: (group, options)=>{\n        assertParsed(group);\n        var inner = buildExpression(group.body, options);\n        if (group.left !== \".\") {\n            var leftNode = new mathMLTree.MathNode(\"mo\", [\n                makeText(group.left, group.mode)\n            ]);\n            leftNode.setAttribute(\"fence\", \"true\");\n            inner.unshift(leftNode);\n        }\n        if (group.right !== \".\") {\n            var rightNode = new mathMLTree.MathNode(\"mo\", [\n                makeText(group.right, group.mode)\n            ]);\n            rightNode.setAttribute(\"fence\", \"true\");\n            if (group.rightColor) {\n                rightNode.setAttribute(\"mathcolor\", group.rightColor);\n            }\n            inner.push(rightNode);\n        }\n        return makeRow(inner);\n    }\n});\ndefineFunction({\n    type: \"middle\",\n    names: [\n        \"\\\\middle\"\n    ],\n    props: {\n        numArgs: 1,\n        primitive: true\n    },\n    handler: (context, args)=>{\n        var delim = checkDelimiter(args[0], context);\n        if (!context.parser.leftrightDepth) {\n            throw new ParseError(\"\\\\middle without preceding \\\\left\", delim);\n        }\n        return {\n            type: \"middle\",\n            mode: context.parser.mode,\n            delim: delim.text\n        };\n    },\n    htmlBuilder: (group, options)=>{\n        var middleDelim;\n        if (group.delim === \".\") {\n            middleDelim = makeNullDelimiter(options, []);\n        } else {\n            middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []);\n            var isMiddle = {\n                delim: group.delim,\n                options\n            }; // Property `isMiddle` not defined on `span`. It is only used in\n            // this file above.\n            // TODO: Fix this violation of the `span` type and possibly rename\n            // things since `isMiddle` sounds like a boolean, but is a struct.\n            // $FlowFixMe\n            middleDelim.isMiddle = isMiddle;\n        }\n        return middleDelim;\n    },\n    mathmlBuilder: (group, options)=>{\n        // A Firefox \\middle will stretch a character vertically only if it\n        // is in the fence part of the operator dictionary at:\n        // https://www.w3.org/TR/MathML3/appendixc.html.\n        // So we need to avoid U+2223 and use plain \"|\" instead.\n        var textNode = group.delim === \"\\\\vert\" || group.delim === \"|\" ? makeText(\"|\", \"text\") : makeText(group.delim, group.mode);\n        var middleNode = new mathMLTree.MathNode(\"mo\", [\n            textNode\n        ]);\n        middleNode.setAttribute(\"fence\", \"true\"); // MathML gives 5/18em spacing to each <mo> element.\n        // \\middle should get delimiter spacing instead.\n        middleNode.setAttribute(\"lspace\", \"0.05em\");\n        middleNode.setAttribute(\"rspace\", \"0.05em\");\n        return middleNode;\n    }\n});\nvar htmlBuilder$7 = (group, options)=>{\n    // \\cancel, \\bcancel, \\xcancel, \\sout, \\fbox, \\colorbox, \\fcolorbox, \\phase\n    // Some groups can return document fragments.  Handle those by wrapping\n    // them in a span.\n    var inner = buildCommon.wrapFragment(buildGroup$1(group.body, options), options);\n    var label = group.label.slice(1);\n    var scale = options.sizeMultiplier;\n    var img;\n    var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different\n    // depending on whether the subject is wider than it is tall, or vice versa.\n    // We don't know the width of a group, so as a proxy, we test if\n    // the subject is a single character. This captures most of the\n    // subjects that should get the \"tall\" treatment.\n    var isSingleChar = utils.isCharacterBox(group.body);\n    if (label === \"sout\") {\n        img = buildCommon.makeSpan([\n            \"stretchy\",\n            \"sout\"\n        ]);\n        img.height = options.fontMetrics().defaultRuleThickness / scale;\n        imgShift = -0.5 * options.fontMetrics().xHeight;\n    } else if (label === \"phase\") {\n        // Set a couple of dimensions from the steinmetz package.\n        var lineWeight = calculateSize({\n            number: 0.6,\n            unit: \"pt\"\n        }, options);\n        var clearance = calculateSize({\n            number: 0.35,\n            unit: \"ex\"\n        }, options); // Prevent size changes like \\Huge from affecting line thickness\n        var newOptions = options.havingBaseSizing();\n        scale = scale / newOptions.sizeMultiplier;\n        var angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle.\n        inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight); // Create an SVG\n        var viewBoxHeight = Math.floor(1000 * angleHeight * scale);\n        var path = phasePath(viewBoxHeight);\n        var svgNode = new SvgNode([\n            new PathNode(\"phase\", path)\n        ], {\n            \"width\": \"400em\",\n            \"height\": makeEm(viewBoxHeight / 1000),\n            \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n            \"preserveAspectRatio\": \"xMinYMin slice\"\n        }); // Wrap it in a span with overflow: hidden.\n        img = buildCommon.makeSvgSpan([\n            \"hide-tail\"\n        ], [\n            svgNode\n        ], options);\n        img.style.height = makeEm(angleHeight);\n        imgShift = inner.depth + lineWeight + clearance;\n    } else {\n        // Add horizontal padding\n        if (/cancel/.test(label)) {\n            if (!isSingleChar) {\n                inner.classes.push(\"cancel-pad\");\n            }\n        } else if (label === \"angl\") {\n            inner.classes.push(\"anglpad\");\n        } else {\n            inner.classes.push(\"boxpad\");\n        } // Add vertical padding\n        var topPad = 0;\n        var bottomPad = 0;\n        var ruleThickness = 0; // ref: cancel package: \\advance\\totalheight2\\p@ % \"+2\"\n        if (/box/.test(label)) {\n            ruleThickness = Math.max(options.fontMetrics().fboxrule, options.minRuleThickness // User override.\n            );\n            topPad = options.fontMetrics().fboxsep + (label === \"colorbox\" ? 0 : ruleThickness);\n            bottomPad = topPad;\n        } else if (label === \"angl\") {\n            ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n            topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself.\n            bottomPad = Math.max(0, 0.25 - inner.depth);\n        } else {\n            topPad = isSingleChar ? 0.2 : 0;\n            bottomPad = topPad;\n        }\n        img = stretchy.encloseSpan(inner, label, topPad, bottomPad, options);\n        if (/fbox|boxed|fcolorbox/.test(label)) {\n            img.style.borderStyle = \"solid\";\n            img.style.borderWidth = makeEm(ruleThickness);\n        } else if (label === \"angl\" && ruleThickness !== 0.049) {\n            img.style.borderTopWidth = makeEm(ruleThickness);\n            img.style.borderRightWidth = makeEm(ruleThickness);\n        }\n        imgShift = inner.depth + bottomPad;\n        if (group.backgroundColor) {\n            img.style.backgroundColor = group.backgroundColor;\n            if (group.borderColor) {\n                img.style.borderColor = group.borderColor;\n            }\n        }\n    }\n    var vlist;\n    if (group.backgroundColor) {\n        vlist = buildCommon.makeVList({\n            positionType: \"individualShift\",\n            children: [\n                {\n                    type: \"elem\",\n                    elem: img,\n                    shift: imgShift\n                },\n                {\n                    type: \"elem\",\n                    elem: inner,\n                    shift: 0\n                }\n            ]\n        }, options);\n    } else {\n        var classes = /cancel|phase/.test(label) ? [\n            \"svg-align\"\n        ] : [];\n        vlist = buildCommon.makeVList({\n            positionType: \"individualShift\",\n            children: [\n                {\n                    type: \"elem\",\n                    elem: inner,\n                    shift: 0\n                },\n                {\n                    type: \"elem\",\n                    elem: img,\n                    shift: imgShift,\n                    wrapperClasses: classes\n                }\n            ]\n        }, options);\n    }\n    if (/cancel/.test(label)) {\n        // The cancel package documentation says that cancel lines add their height\n        // to the expression, but tests show that isn't how it actually works.\n        vlist.height = inner.height;\n        vlist.depth = inner.depth;\n    }\n    if (/cancel/.test(label) && !isSingleChar) {\n        // cancel does not create horiz space for its line extension.\n        return buildCommon.makeSpan([\n            \"mord\",\n            \"cancel-lap\"\n        ], [\n            vlist\n        ], options);\n    } else {\n        return buildCommon.makeSpan([\n            \"mord\"\n        ], [\n            vlist\n        ], options);\n    }\n};\nvar mathmlBuilder$6 = (group, options)=>{\n    var fboxsep = 0;\n    var node = new mathMLTree.MathNode(group.label.indexOf(\"colorbox\") > -1 ? \"mpadded\" : \"menclose\", [\n        buildGroup(group.body, options)\n    ]);\n    switch(group.label){\n        case \"\\\\cancel\":\n            node.setAttribute(\"notation\", \"updiagonalstrike\");\n            break;\n        case \"\\\\bcancel\":\n            node.setAttribute(\"notation\", \"downdiagonalstrike\");\n            break;\n        case \"\\\\phase\":\n            node.setAttribute(\"notation\", \"phasorangle\");\n            break;\n        case \"\\\\sout\":\n            node.setAttribute(\"notation\", \"horizontalstrike\");\n            break;\n        case \"\\\\fbox\":\n            node.setAttribute(\"notation\", \"box\");\n            break;\n        case \"\\\\angl\":\n            node.setAttribute(\"notation\", \"actuarial\");\n            break;\n        case \"\\\\fcolorbox\":\n        case \"\\\\colorbox\":\n            // <menclose> doesn't have a good notation option. So use <mpadded>\n            // instead. Set some attributes that come included with <menclose>.\n            fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm;\n            node.setAttribute(\"width\", \"+\" + 2 * fboxsep + \"pt\");\n            node.setAttribute(\"height\", \"+\" + 2 * fboxsep + \"pt\");\n            node.setAttribute(\"lspace\", fboxsep + \"pt\"); //\n            node.setAttribute(\"voffset\", fboxsep + \"pt\");\n            if (group.label === \"\\\\fcolorbox\") {\n                var thk = Math.max(options.fontMetrics().fboxrule, options.minRuleThickness // user override\n                );\n                node.setAttribute(\"style\", \"border: \" + thk + \"em solid \" + String(group.borderColor));\n            }\n            break;\n        case \"\\\\xcancel\":\n            node.setAttribute(\"notation\", \"updiagonalstrike downdiagonalstrike\");\n            break;\n    }\n    if (group.backgroundColor) {\n        node.setAttribute(\"mathbackground\", group.backgroundColor);\n    }\n    return node;\n};\ndefineFunction({\n    type: \"enclose\",\n    names: [\n        \"\\\\colorbox\"\n    ],\n    props: {\n        numArgs: 2,\n        allowedInText: true,\n        argTypes: [\n            \"color\",\n            \"text\"\n        ]\n    },\n    handler (_ref, args, optArgs) {\n        var { parser, funcName } = _ref;\n        var color = assertNodeType(args[0], \"color-token\").color;\n        var body = args[1];\n        return {\n            type: \"enclose\",\n            mode: parser.mode,\n            label: funcName,\n            backgroundColor: color,\n            body\n        };\n    },\n    htmlBuilder: htmlBuilder$7,\n    mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n    type: \"enclose\",\n    names: [\n        \"\\\\fcolorbox\"\n    ],\n    props: {\n        numArgs: 3,\n        allowedInText: true,\n        argTypes: [\n            \"color\",\n            \"color\",\n            \"text\"\n        ]\n    },\n    handler (_ref2, args, optArgs) {\n        var { parser, funcName } = _ref2;\n        var borderColor = assertNodeType(args[0], \"color-token\").color;\n        var backgroundColor = assertNodeType(args[1], \"color-token\").color;\n        var body = args[2];\n        return {\n            type: \"enclose\",\n            mode: parser.mode,\n            label: funcName,\n            backgroundColor,\n            borderColor,\n            body\n        };\n    },\n    htmlBuilder: htmlBuilder$7,\n    mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n    type: \"enclose\",\n    names: [\n        \"\\\\fbox\"\n    ],\n    props: {\n        numArgs: 1,\n        argTypes: [\n            \"hbox\"\n        ],\n        allowedInText: true\n    },\n    handler (_ref3, args) {\n        var { parser } = _ref3;\n        return {\n            type: \"enclose\",\n            mode: parser.mode,\n            label: \"\\\\fbox\",\n            body: args[0]\n        };\n    }\n});\ndefineFunction({\n    type: \"enclose\",\n    names: [\n        \"\\\\cancel\",\n        \"\\\\bcancel\",\n        \"\\\\xcancel\",\n        \"\\\\sout\",\n        \"\\\\phase\"\n    ],\n    props: {\n        numArgs: 1\n    },\n    handler (_ref4, args) {\n        var { parser, funcName } = _ref4;\n        var body = args[0];\n        return {\n            type: \"enclose\",\n            mode: parser.mode,\n            label: funcName,\n            body\n        };\n    },\n    htmlBuilder: htmlBuilder$7,\n    mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n    type: \"enclose\",\n    names: [\n        \"\\\\angl\"\n    ],\n    props: {\n        numArgs: 1,\n        argTypes: [\n            \"hbox\"\n        ],\n        allowedInText: false\n    },\n    handler (_ref5, args) {\n        var { parser } = _ref5;\n        return {\n            type: \"enclose\",\n            mode: parser.mode,\n            label: \"\\\\angl\",\n            body: args[0]\n        };\n    }\n});\n/**\n * All registered environments.\n * `environments.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `environments.js`.\n */ var _environments = {};\nfunction defineEnvironment(_ref) {\n    var { type, names, props, handler, htmlBuilder, mathmlBuilder } = _ref;\n    // Set default values of environments.\n    var data = {\n        type,\n        numArgs: props.numArgs || 0,\n        allowedInText: false,\n        numOptionalArgs: 0,\n        handler\n    };\n    for(var i = 0; i < names.length; ++i){\n        // TODO: The value type of _environments should be a type union of all\n        // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is\n        // an existential type.\n        _environments[names[i]] = data;\n    }\n    if (htmlBuilder) {\n        _htmlGroupBuilders[type] = htmlBuilder;\n    }\n    if (mathmlBuilder) {\n        _mathmlGroupBuilders[type] = mathmlBuilder;\n    }\n}\n/**\n * All registered global/built-in macros.\n * `macros.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `macros.js`.\n */ var _macros = {}; // This function might one day accept an additional argument and do more things.\nfunction defineMacro(name, body) {\n    _macros[name] = body;\n}\n// Helper functions\nfunction getHLines(parser) {\n    // Return an array. The array length = number of hlines.\n    // Each element in the array tells if the line is dashed.\n    var hlineInfo = [];\n    parser.consumeSpaces();\n    var nxt = parser.fetch().text;\n    if (nxt === \"\\\\relax\") {\n        // \\relax is an artifact of the \\cr macro below\n        parser.consume();\n        parser.consumeSpaces();\n        nxt = parser.fetch().text;\n    }\n    while(nxt === \"\\\\hline\" || nxt === \"\\\\hdashline\"){\n        parser.consume();\n        hlineInfo.push(nxt === \"\\\\hdashline\");\n        parser.consumeSpaces();\n        nxt = parser.fetch().text;\n    }\n    return hlineInfo;\n}\nvar validateAmsEnvironmentContext = (context)=>{\n    var settings = context.parser.settings;\n    if (!settings.displayMode) {\n        throw new ParseError(\"{\" + context.envName + \"} can be used only in\" + \" display mode.\");\n    }\n}; // autoTag (an argument to parseArray) can be one of three values:\n// * undefined: Regular (not-top-level) array; no tags on each row\n// * true: Automatic equation numbering, overridable by \\tag\n// * false: Tags allowed on each row, but no automatic numbering\n// This function *doesn't* work with the \"split\" environment name.\nfunction getAutoTag(name) {\n    if (name.indexOf(\"ed\") === -1) {\n        return name.indexOf(\"*\") === -1;\n    } // return undefined;\n}\n/**\n * Parse the body of the environment, with rows delimited by \\\\ and\n * columns delimited by &, and create a nested list in row-major order\n * with one group per cell.  If given an optional argument style\n * (\"text\", \"display\", etc.), then each cell is cast into that style.\n */ function parseArray(parser, _ref, style) {\n    var { hskipBeforeAndAfter, addJot, cols, arraystretch, colSeparationType, autoTag, singleRow, emptySingleRow, maxNumCols, leqno } = _ref;\n    parser.gullet.beginGroup();\n    if (!singleRow) {\n        // \\cr is equivalent to \\\\ without the optional size argument (see below)\n        // TODO: provide helpful error when \\cr is used outside array environment\n        parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n    } // Get current arraystretch if it's not set by the environment\n    if (!arraystretch) {\n        var stretch = parser.gullet.expandMacroAsText(\"\\\\arraystretch\");\n        if (stretch == null) {\n            // Default \\arraystretch from lttab.dtx\n            arraystretch = 1;\n        } else {\n            arraystretch = parseFloat(stretch);\n            if (!arraystretch || arraystretch < 0) {\n                throw new ParseError(\"Invalid \\\\arraystretch: \" + stretch);\n            }\n        }\n    } // Start group for first cell\n    parser.gullet.beginGroup();\n    var row = [];\n    var body = [\n        row\n    ];\n    var rowGaps = [];\n    var hLinesBeforeRow = [];\n    var tags = autoTag != null ? [] : undefined; // amsmath uses \\global\\@eqnswtrue and \\global\\@eqnswfalse to represent\n    // whether this row should have an equation number.  Simulate this with\n    // a \\@eqnsw macro set to 1 or 0.\n    function beginRow() {\n        if (autoTag) {\n            parser.gullet.macros.set(\"\\\\@eqnsw\", \"1\", true);\n        }\n    }\n    function endRow() {\n        if (tags) {\n            if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n                tags.push(parser.subparse([\n                    new Token(\"\\\\df@tag\")\n                ]));\n                parser.gullet.macros.set(\"\\\\df@tag\", undefined, true);\n            } else {\n                tags.push(Boolean(autoTag) && parser.gullet.macros.get(\"\\\\@eqnsw\") === \"1\");\n            }\n        }\n    }\n    beginRow(); // Test for \\hline at the top of the array.\n    hLinesBeforeRow.push(getHLines(parser));\n    while(true){\n        // eslint-disable-line no-constant-condition\n        // Parse each cell in its own group (namespace)\n        var cell = parser.parseExpression(false, singleRow ? \"\\\\end\" : \"\\\\\\\\\");\n        parser.gullet.endGroup();\n        parser.gullet.beginGroup();\n        cell = {\n            type: \"ordgroup\",\n            mode: parser.mode,\n            body: cell\n        };\n        if (style) {\n            cell = {\n                type: \"styling\",\n                mode: parser.mode,\n                style,\n                body: [\n                    cell\n                ]\n            };\n        }\n        row.push(cell);\n        var next = parser.fetch().text;\n        if (next === \"&\") {\n            if (maxNumCols && row.length === maxNumCols) {\n                if (singleRow || colSeparationType) {\n                    // {equation} or {split}\n                    throw new ParseError(\"Too many tab characters: &\", parser.nextToken);\n                } else {\n                    // {array} environment\n                    parser.settings.reportNonstrict(\"textEnv\", \"Too few columns \" + \"specified in the {array} column argument.\");\n                }\n            }\n            parser.consume();\n        } else if (next === \"\\\\end\") {\n            endRow(); // Arrays terminate newlines with `\\crcr` which consumes a `\\cr` if\n            // the last line is empty.  However, AMS environments keep the\n            // empty row if it's the only one.\n            // NOTE: Currently, `cell` is the last item added into `row`.\n            if (row.length === 1 && cell.type === \"styling\" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) {\n                body.pop();\n            }\n            if (hLinesBeforeRow.length < body.length + 1) {\n                hLinesBeforeRow.push([]);\n            }\n            break;\n        } else if (next === \"\\\\\\\\\") {\n            parser.consume();\n            var size = void 0; // \\def\\Let@{\\let\\\\\\math@cr}\n            // \\def\\math@cr{...\\math@cr@}\n            // \\def\\math@cr@{\\new@ifnextchar[\\math@cr@@{\\math@cr@@[\\z@]}}\n            // \\def\\math@cr@@[#1]{...\\math@cr@@@...}\n            // \\def\\math@cr@@@{\\cr}\n            if (parser.gullet.future().text !== \" \") {\n                size = parser.parseSizeGroup(true);\n            }\n            rowGaps.push(size ? size.value : null);\n            endRow(); // check for \\hline(s) following the row separator\n            hLinesBeforeRow.push(getHLines(parser));\n            row = [];\n            body.push(row);\n            beginRow();\n        } else {\n            throw new ParseError(\"Expected & or \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n        }\n    } // End cell group\n    parser.gullet.endGroup(); // End array group defining \\cr\n    parser.gullet.endGroup();\n    return {\n        type: \"array\",\n        mode: parser.mode,\n        addJot,\n        arraystretch,\n        body,\n        cols,\n        rowGaps,\n        hskipBeforeAndAfter,\n        hLinesBeforeRow,\n        colSeparationType,\n        tags,\n        leqno\n    };\n} // Decides on a style for cells in an array according to whether the given\n// environment name starts with the letter 'd'.\nfunction dCellStyle(envName) {\n    if (envName.slice(0, 1) === \"d\") {\n        return \"display\";\n    } else {\n        return \"text\";\n    }\n}\nvar htmlBuilder$6 = function htmlBuilder(group, options) {\n    var r;\n    var c;\n    var nr = group.body.length;\n    var hLinesBeforeRow = group.hLinesBeforeRow;\n    var nc = 0;\n    var body = new Array(nr);\n    var hlines = [];\n    var ruleThickness = Math.max(options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override.\n    ); // Horizontal spacing\n    var pt = 1 / options.fontMetrics().ptPerEm;\n    var arraycolsep = 5 * pt; // default value, i.e. \\arraycolsep in article.cls\n    if (group.colSeparationType && group.colSeparationType === \"small\") {\n        // We're in a {smallmatrix}. Default column space is \\thickspace,\n        // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}.\n        // But that needs adjustment because LaTeX applies \\scriptstyle to the\n        // entire array, including the colspace, but this function applies\n        // \\scriptstyle only inside each element.\n        var localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier;\n        arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier);\n    } // Vertical spacing\n    var baselineskip = group.colSeparationType === \"CD\" ? calculateSize({\n        number: 3,\n        unit: \"ex\"\n    }, options) : 12 * pt; // see size10.clo\n    // Default \\jot from ltmath.dtx\n    // TODO(edemaine): allow overriding \\jot via \\setlength (#687)\n    var jot = 3 * pt;\n    var arrayskip = group.arraystretch * baselineskip;\n    var arstrutHeight = 0.7 * arrayskip; // \\strutbox in ltfsstrc.dtx and\n    var arstrutDepth = 0.3 * arrayskip; // \\@arstrutbox in lttab.dtx\n    var totalHeight = 0; // Set a position for \\hline(s) at the top of the array, if any.\n    function setHLinePos(hlinesInGap) {\n        for(var i = 0; i < hlinesInGap.length; ++i){\n            if (i > 0) {\n                totalHeight += 0.25;\n            }\n            hlines.push({\n                pos: totalHeight,\n                isDashed: hlinesInGap[i]\n            });\n        }\n    }\n    setHLinePos(hLinesBeforeRow[0]);\n    for(r = 0; r < group.body.length; ++r){\n        var inrow = group.body[r];\n        var height = arstrutHeight; // \\@array adds an \\@arstrut\n        var depth = arstrutDepth; // to each tow (via the template)\n        if (nc < inrow.length) {\n            nc = inrow.length;\n        }\n        var outrow = new Array(inrow.length);\n        for(c = 0; c < inrow.length; ++c){\n            var elt = buildGroup$1(inrow[c], options);\n            if (depth < elt.depth) {\n                depth = elt.depth;\n            }\n            if (height < elt.height) {\n                height = elt.height;\n            }\n            outrow[c] = elt;\n        }\n        var rowGap = group.rowGaps[r];\n        var gap = 0;\n        if (rowGap) {\n            gap = calculateSize(rowGap, options);\n            if (gap > 0) {\n                // \\@argarraycr\n                gap += arstrutDepth;\n                if (depth < gap) {\n                    depth = gap; // \\@xargarraycr\n                }\n                gap = 0;\n            }\n        } // In AMS multiline environments such as aligned and gathered, rows\n        // correspond to lines that have additional \\jot added to the\n        // \\baselineskip via \\openup.\n        if (group.addJot) {\n            depth += jot;\n        }\n        outrow.height = height;\n        outrow.depth = depth;\n        totalHeight += height;\n        outrow.pos = totalHeight;\n        totalHeight += depth + gap; // \\@yargarraycr\n        body[r] = outrow; // Set a position for \\hline(s), if any.\n        setHLinePos(hLinesBeforeRow[r + 1]);\n    }\n    var offset = totalHeight / 2 + options.fontMetrics().axisHeight;\n    var colDescriptions = group.cols || [];\n    var cols = [];\n    var colSep;\n    var colDescrNum;\n    var tagSpans = [];\n    if (group.tags && group.tags.some((tag)=>tag)) {\n        // An environment with manual tags and/or automatic equation numbers.\n        // Create node(s), the latter of which trigger CSS counter increment.\n        for(r = 0; r < nr; ++r){\n            var rw = body[r];\n            var shift = rw.pos - offset;\n            var tag = group.tags[r];\n            var tagSpan = void 0;\n            if (tag === true) {\n                // automatic numbering\n                tagSpan = buildCommon.makeSpan([\n                    \"eqn-num\"\n                ], [], options);\n            } else if (tag === false) {\n                // \\nonumber/\\notag or starred environment\n                tagSpan = buildCommon.makeSpan([], [], options);\n            } else {\n                // manual \\tag\n                tagSpan = buildCommon.makeSpan([], buildExpression$1(tag, options, true), options);\n            }\n            tagSpan.depth = rw.depth;\n            tagSpan.height = rw.height;\n            tagSpans.push({\n                type: \"elem\",\n                elem: tagSpan,\n                shift\n            });\n        }\n    }\n    for(c = 0, colDescrNum = 0; // descriptions, so trailing separators don't get lost.\n    c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum){\n        var colDescr = colDescriptions[colDescrNum] || {};\n        var firstSeparator = true;\n        while(colDescr.type === \"separator\"){\n            // If there is more than one separator in a row, add a space\n            // between them.\n            if (!firstSeparator) {\n                colSep = buildCommon.makeSpan([\n                    \"arraycolsep\"\n                ], []);\n                colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep);\n                cols.push(colSep);\n            }\n            if (colDescr.separator === \"|\" || colDescr.separator === \":\") {\n                var lineType = colDescr.separator === \"|\" ? \"solid\" : \"dashed\";\n                var separator = buildCommon.makeSpan([\n                    \"vertical-separator\"\n                ], [], options);\n                separator.style.height = makeEm(totalHeight);\n                separator.style.borderRightWidth = makeEm(ruleThickness);\n                separator.style.borderRightStyle = lineType;\n                separator.style.margin = \"0 \" + makeEm(-ruleThickness / 2);\n                var _shift = totalHeight - offset;\n                if (_shift) {\n                    separator.style.verticalAlign = makeEm(-_shift);\n                }\n                cols.push(separator);\n            } else {\n                throw new ParseError(\"Invalid separator type: \" + colDescr.separator);\n            }\n            colDescrNum++;\n            colDescr = colDescriptions[colDescrNum] || {};\n            firstSeparator = false;\n        }\n        if (c >= nc) {\n            continue;\n        }\n        var sepwidth = void 0;\n        if (c > 0 || group.hskipBeforeAndAfter) {\n            sepwidth = utils.deflt(colDescr.pregap, arraycolsep);\n            if (sepwidth !== 0) {\n                colSep = buildCommon.makeSpan([\n                    \"arraycolsep\"\n                ], []);\n                colSep.style.width = makeEm(sepwidth);\n                cols.push(colSep);\n            }\n        }\n        var col = [];\n        for(r = 0; r < nr; ++r){\n            var row = body[r];\n            var elem = row[c];\n            if (!elem) {\n                continue;\n            }\n            var _shift2 = row.pos - offset;\n            elem.depth = row.depth;\n            elem.height = row.height;\n            col.push({\n                type: \"elem\",\n                elem: elem,\n                shift: _shift2\n            });\n        }\n        col = buildCommon.makeVList({\n            positionType: \"individualShift\",\n            children: col\n        }, options);\n        col = buildCommon.makeSpan([\n            \"col-align-\" + (colDescr.align || \"c\")\n        ], [\n            col\n        ]);\n        cols.push(col);\n        if (c < nc - 1 || group.hskipBeforeAndAfter) {\n            sepwidth = utils.deflt(colDescr.postgap, arraycolsep);\n            if (sepwidth !== 0) {\n                colSep = buildCommon.makeSpan([\n                    \"arraycolsep\"\n                ], []);\n                colSep.style.width = makeEm(sepwidth);\n                cols.push(colSep);\n            }\n        }\n    }\n    body = buildCommon.makeSpan([\n        \"mtable\"\n    ], cols); // Add \\hline(s), if any.\n    if (hlines.length > 0) {\n        var line = buildCommon.makeLineSpan(\"hline\", options, ruleThickness);\n        var dashes = buildCommon.makeLineSpan(\"hdashline\", options, ruleThickness);\n        var vListElems = [\n            {\n                type: \"elem\",\n                elem: body,\n                shift: 0\n            }\n        ];\n        while(hlines.length > 0){\n            var hline = hlines.pop();\n            var lineShift = hline.pos - offset;\n            if (hline.isDashed) {\n                vListElems.push({\n                    type: \"elem\",\n                    elem: dashes,\n                    shift: lineShift\n                });\n            } else {\n                vListElems.push({\n                    type: \"elem\",\n                    elem: line,\n                    shift: lineShift\n                });\n            }\n        }\n        body = buildCommon.makeVList({\n            positionType: \"individualShift\",\n            children: vListElems\n        }, options);\n    }\n    if (tagSpans.length === 0) {\n        return buildCommon.makeSpan([\n            \"mord\"\n        ], [\n            body\n        ], options);\n    } else {\n        var eqnNumCol = buildCommon.makeVList({\n            positionType: \"individualShift\",\n            children: tagSpans\n        }, options);\n        eqnNumCol = buildCommon.makeSpan([\n            \"tag\"\n        ], [\n            eqnNumCol\n        ], options);\n        return buildCommon.makeFragment([\n            body,\n            eqnNumCol\n        ]);\n    }\n};\nvar alignMap = {\n    c: \"center \",\n    l: \"left \",\n    r: \"right \"\n};\nvar mathmlBuilder$5 = function mathmlBuilder(group, options) {\n    var tbl = [];\n    var glue = new mathMLTree.MathNode(\"mtd\", [], [\n        \"mtr-glue\"\n    ]);\n    var tag = new mathMLTree.MathNode(\"mtd\", [], [\n        \"mml-eqn-num\"\n    ]);\n    for(var i = 0; i < group.body.length; i++){\n        var rw = group.body[i];\n        var row = [];\n        for(var j = 0; j < rw.length; j++){\n            row.push(new mathMLTree.MathNode(\"mtd\", [\n                buildGroup(rw[j], options)\n            ]));\n        }\n        if (group.tags && group.tags[i]) {\n            row.unshift(glue);\n            row.push(glue);\n            if (group.leqno) {\n                row.unshift(tag);\n            } else {\n                row.push(tag);\n            }\n        }\n        tbl.push(new mathMLTree.MathNode(\"mtr\", row));\n    }\n    var table = new mathMLTree.MathNode(\"mtable\", tbl); // Set column alignment, row spacing, column spacing, and\n    // array lines by setting attributes on the table element.\n    // Set the row spacing. In MathML, we specify a gap distance.\n    // We do not use rowGap[] because MathML automatically increases\n    // cell height with the height/depth of the element content.\n    // LaTeX \\arraystretch multiplies the row baseline-to-baseline distance.\n    // We simulate this by adding (arraystretch - 1)em to the gap. This\n    // does a reasonable job of adjusting arrays containing 1 em tall content.\n    // The 0.16 and 0.09 values are found empirically. They produce an array\n    // similar to LaTeX and in which content does not interfere with \\hlines.\n    var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray}\n     : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);\n    table.setAttribute(\"rowspacing\", makeEm(gap)); // MathML table lines go only between cells.\n    // To place a line on an edge we'll use <menclose>, if necessary.\n    var menclose = \"\";\n    var align = \"\";\n    if (group.cols && group.cols.length > 0) {\n        // Find column alignment, column spacing, and  vertical lines.\n        var cols = group.cols;\n        var columnLines = \"\";\n        var prevTypeWasAlign = false;\n        var iStart = 0;\n        var iEnd = cols.length;\n        if (cols[0].type === \"separator\") {\n            menclose += \"top \";\n            iStart = 1;\n        }\n        if (cols[cols.length - 1].type === \"separator\") {\n            menclose += \"bottom \";\n            iEnd -= 1;\n        }\n        for(var _i = iStart; _i < iEnd; _i++){\n            if (cols[_i].type === \"align\") {\n                align += alignMap[cols[_i].align];\n                if (prevTypeWasAlign) {\n                    columnLines += \"none \";\n                }\n                prevTypeWasAlign = true;\n            } else if (cols[_i].type === \"separator\") {\n                // MathML accepts only single lines between cells.\n                // So we read only the first of consecutive separators.\n                if (prevTypeWasAlign) {\n                    columnLines += cols[_i].separator === \"|\" ? \"solid \" : \"dashed \";\n                    prevTypeWasAlign = false;\n                }\n            }\n        }\n        table.setAttribute(\"columnalign\", align.trim());\n        if (/[sd]/.test(columnLines)) {\n            table.setAttribute(\"columnlines\", columnLines.trim());\n        }\n    } // Set column spacing.\n    if (group.colSeparationType === \"align\") {\n        var _cols = group.cols || [];\n        var spacing = \"\";\n        for(var _i2 = 1; _i2 < _cols.length; _i2++){\n            spacing += _i2 % 2 ? \"0em \" : \"1em \";\n        }\n        table.setAttribute(\"columnspacing\", spacing.trim());\n    } else if (group.colSeparationType === \"alignat\" || group.colSeparationType === \"gather\") {\n        table.setAttribute(\"columnspacing\", \"0em\");\n    } else if (group.colSeparationType === \"small\") {\n        table.setAttribute(\"columnspacing\", \"0.2778em\");\n    } else if (group.colSeparationType === \"CD\") {\n        table.setAttribute(\"columnspacing\", \"0.5em\");\n    } else {\n        table.setAttribute(\"columnspacing\", \"1em\");\n    } // Address \\hline and \\hdashline\n    var rowLines = \"\";\n    var hlines = group.hLinesBeforeRow;\n    menclose += hlines[0].length > 0 ? \"left \" : \"\";\n    menclose += hlines[hlines.length - 1].length > 0 ? \"right \" : \"\";\n    for(var _i3 = 1; _i3 < hlines.length - 1; _i3++){\n        rowLines += hlines[_i3].length === 0 ? \"none \" // MathML accepts only a single line between rows. Read one element.\n         : hlines[_i3][0] ? \"dashed \" : \"solid \";\n    }\n    if (/[sd]/.test(rowLines)) {\n        table.setAttribute(\"rowlines\", rowLines.trim());\n    }\n    if (menclose !== \"\") {\n        table = new mathMLTree.MathNode(\"menclose\", [\n            table\n        ]);\n        table.setAttribute(\"notation\", menclose.trim());\n    }\n    if (group.arraystretch && group.arraystretch < 1) {\n        // A small array. Wrap in scriptstyle so row gap is not too large.\n        table = new mathMLTree.MathNode(\"mstyle\", [\n            table\n        ]);\n        table.setAttribute(\"scriptlevel\", \"1\");\n    }\n    return table;\n}; // Convenience function for align, align*, aligned, alignat, alignat*, alignedat.\nvar alignedHandler = function alignedHandler(context, args) {\n    if (context.envName.indexOf(\"ed\") === -1) {\n        validateAmsEnvironmentContext(context);\n    }\n    var cols = [];\n    var separationType = context.envName.indexOf(\"at\") > -1 ? \"alignat\" : \"align\";\n    var isSplit = context.envName === \"split\";\n    var res = parseArray(context.parser, {\n        cols,\n        addJot: true,\n        autoTag: isSplit ? undefined : getAutoTag(context.envName),\n        emptySingleRow: true,\n        colSeparationType: separationType,\n        maxNumCols: isSplit ? 2 : undefined,\n        leqno: context.parser.settings.leqno\n    }, \"display\"); // Determining number of columns.\n    // 1. If the first argument is given, we use it as a number of columns,\n    //    and makes sure that each row doesn't exceed that number.\n    // 2. Otherwise, just count number of columns = maximum number\n    //    of cells in each row (\"aligned\" mode -- isAligned will be true).\n    //\n    // At the same time, prepend empty group {} at beginning of every second\n    // cell in each row (starting with second cell) so that operators become\n    // binary.  This behavior is implemented in amsmath's \\start@aligned.\n    var numMaths;\n    var numCols = 0;\n    var emptyGroup = {\n        type: \"ordgroup\",\n        mode: context.mode,\n        body: []\n    };\n    if (args[0] && args[0].type === \"ordgroup\") {\n        var arg0 = \"\";\n        for(var i = 0; i < args[0].body.length; i++){\n            var textord = assertNodeType(args[0].body[i], \"textord\");\n            arg0 += textord.text;\n        }\n        numMaths = Number(arg0);\n        numCols = numMaths * 2;\n    }\n    var isAligned = !numCols;\n    res.body.forEach(function(row) {\n        for(var _i4 = 1; _i4 < row.length; _i4 += 2){\n            // Modify ordgroup node within styling node\n            var styling = assertNodeType(row[_i4], \"styling\");\n            var ordgroup = assertNodeType(styling.body[0], \"ordgroup\");\n            ordgroup.body.unshift(emptyGroup);\n        }\n        if (!isAligned) {\n            // Case 1\n            var curMaths = row.length / 2;\n            if (numMaths < curMaths) {\n                throw new ParseError(\"Too many math in a row: \" + (\"expected \" + numMaths + \", but got \" + curMaths), row[0]);\n            }\n        } else if (numCols < row.length) {\n            // Case 2\n            numCols = row.length;\n        }\n    }); // Adjusting alignment.\n    // In aligned mode, we add one \\qquad between columns;\n    // otherwise we add nothing.\n    for(var _i5 = 0; _i5 < numCols; ++_i5){\n        var align = \"r\";\n        var pregap = 0;\n        if (_i5 % 2 === 1) {\n            align = \"l\";\n        } else if (_i5 > 0 && isAligned) {\n            // \"aligned\" mode.\n            pregap = 1; // add one \\quad\n        }\n        cols[_i5] = {\n            type: \"align\",\n            align: align,\n            pregap: pregap,\n            postgap: 0\n        };\n    }\n    res.colSeparationType = isAligned ? \"align\" : \"alignat\";\n    return res;\n}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation\n// is part of the source2e.pdf file of LaTeX2e source documentation.\n// {darray} is an {array} environment where cells are set in \\displaystyle,\n// as defined in nccmath.sty.\ndefineEnvironment({\n    type: \"array\",\n    names: [\n        \"array\",\n        \"darray\"\n    ],\n    props: {\n        numArgs: 1\n    },\n    handler (context, args) {\n        // Since no types are specified above, the two possibilities are\n        // - The argument is wrapped in {} or [], in which case Parser's\n        //   parseGroup() returns an \"ordgroup\" wrapping some symbol node.\n        // - The argument is a bare symbol node.\n        var symNode = checkSymbolNodeType(args[0]);\n        var colalign = symNode ? [\n            args[0]\n        ] : assertNodeType(args[0], \"ordgroup\").body;\n        var cols = colalign.map(function(nde) {\n            var node = assertSymbolNodeType(nde);\n            var ca = node.text;\n            if (\"lcr\".indexOf(ca) !== -1) {\n                return {\n                    type: \"align\",\n                    align: ca\n                };\n            } else if (ca === \"|\") {\n                return {\n                    type: \"separator\",\n                    separator: \"|\"\n                };\n            } else if (ca === \":\") {\n                return {\n                    type: \"separator\",\n                    separator: \":\"\n                };\n            }\n            throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n        });\n        var res = {\n            cols,\n            hskipBeforeAndAfter: true,\n            // \\@preamble in lttab.dtx\n            maxNumCols: cols.length\n        };\n        return parseArray(context.parser, res, dCellStyle(context.envName));\n    },\n    htmlBuilder: htmlBuilder$6,\n    mathmlBuilder: mathmlBuilder$5\n}); // The matrix environments of amsmath builds on the array environment\n// of LaTeX, which is discussed above.\n// The mathtools package adds starred versions of the same environments.\n// These have an optional argument to choose left|center|right justification.\ndefineEnvironment({\n    type: \"array\",\n    names: [\n        \"matrix\",\n        \"pmatrix\",\n        \"bmatrix\",\n        \"Bmatrix\",\n        \"vmatrix\",\n        \"Vmatrix\",\n        \"matrix*\",\n        \"pmatrix*\",\n        \"bmatrix*\",\n        \"Bmatrix*\",\n        \"vmatrix*\",\n        \"Vmatrix*\"\n    ],\n    props: {\n        numArgs: 0\n    },\n    handler (context) {\n        var delimiters = {\n            \"matrix\": null,\n            \"pmatrix\": [\n                \"(\",\n                \")\"\n            ],\n            \"bmatrix\": [\n                \"[\",\n                \"]\"\n            ],\n            \"Bmatrix\": [\n                \"\\\\{\",\n                \"\\\\}\"\n            ],\n            \"vmatrix\": [\n                \"|\",\n                \"|\"\n            ],\n            \"Vmatrix\": [\n                \"\\\\Vert\",\n                \"\\\\Vert\"\n            ]\n        }[context.envName.replace(\"*\", \"\")]; // \\hskip -\\arraycolsep in amsmath\n        var colAlign = \"c\";\n        var payload = {\n            hskipBeforeAndAfter: false,\n            cols: [\n                {\n                    type: \"align\",\n                    align: colAlign\n                }\n            ]\n        };\n        if (context.envName.charAt(context.envName.length - 1) === \"*\") {\n            // It's one of the mathtools starred functions.\n            // Parse the optional alignment argument.\n            var parser = context.parser;\n            parser.consumeSpaces();\n            if (parser.fetch().text === \"[\") {\n                parser.consume();\n                parser.consumeSpaces();\n                colAlign = parser.fetch().text;\n                if (\"lcr\".indexOf(colAlign) === -1) {\n                    throw new ParseError(\"Expected l or c or r\", parser.nextToken);\n                }\n                parser.consume();\n                parser.consumeSpaces();\n                parser.expect(\"]\");\n                parser.consume();\n                payload.cols = [\n                    {\n                        type: \"align\",\n                        align: colAlign\n                    }\n                ];\n            }\n        }\n        var res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs.\n        var numCols = Math.max(0, ...res.body.map((row)=>row.length));\n        res.cols = new Array(numCols).fill({\n            type: \"align\",\n            align: colAlign\n        });\n        return delimiters ? {\n            type: \"leftright\",\n            mode: context.mode,\n            body: [\n                res\n            ],\n            left: delimiters[0],\n            right: delimiters[1],\n            rightColor: undefined // \\right uninfluenced by \\color in array\n        } : res;\n    },\n    htmlBuilder: htmlBuilder$6,\n    mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n    type: \"array\",\n    names: [\n        \"smallmatrix\"\n    ],\n    props: {\n        numArgs: 0\n    },\n    handler (context) {\n        var payload = {\n            arraystretch: 0.5\n        };\n        var res = parseArray(context.parser, payload, \"script\");\n        res.colSeparationType = \"small\";\n        return res;\n    },\n    htmlBuilder: htmlBuilder$6,\n    mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n    type: \"array\",\n    names: [\n        \"subarray\"\n    ],\n    props: {\n        numArgs: 1\n    },\n    handler (context, args) {\n        // Parsing of {subarray} is similar to {array}\n        var symNode = checkSymbolNodeType(args[0]);\n        var colalign = symNode ? [\n            args[0]\n        ] : assertNodeType(args[0], \"ordgroup\").body;\n        var cols = colalign.map(function(nde) {\n            var node = assertSymbolNodeType(nde);\n            var ca = node.text; // {subarray} only recognizes \"l\" & \"c\"\n            if (\"lc\".indexOf(ca) !== -1) {\n                return {\n                    type: \"align\",\n                    align: ca\n                };\n            }\n            throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n        });\n        if (cols.length > 1) {\n            throw new ParseError(\"{subarray} can contain only one column\");\n        }\n        var res = {\n            cols,\n            hskipBeforeAndAfter: false,\n            arraystretch: 0.5\n        };\n        res = parseArray(context.parser, res, \"script\");\n        if (res.body.length > 0 && res.body[0].length > 1) {\n            throw new ParseError(\"{subarray} can contain only one column\");\n        }\n        return res;\n    },\n    htmlBuilder: htmlBuilder$6,\n    mathmlBuilder: mathmlBuilder$5\n}); // A cases environment (in amsmath.sty) is almost equivalent to\n// \\def\\arraystretch{1.2}%\n// \\left\\{\\begin{array}{@{}l@{\\quad}l@{}} … \\end{array}\\right.\n// {dcases} is a {cases} environment where cells are set in \\displaystyle,\n// as defined in mathtools.sty.\n// {rcases} is another mathtools environment. It's brace is on the right side.\ndefineEnvironment({\n    type: \"array\",\n    names: [\n        \"cases\",\n        \"dcases\",\n        \"rcases\",\n        \"drcases\"\n    ],\n    props: {\n        numArgs: 0\n    },\n    handler (context) {\n        var payload = {\n            arraystretch: 1.2,\n            cols: [\n                {\n                    type: \"align\",\n                    align: \"l\",\n                    pregap: 0,\n                    // TODO(kevinb) get the current style.\n                    // For now we use the metrics for TEXT style which is what we were\n                    // doing before.  Before attempting to get the current style we\n                    // should look at TeX's behavior especially for \\over and matrices.\n                    postgap: 1.0\n                },\n                {\n                    type: \"align\",\n                    align: \"l\",\n                    pregap: 0,\n                    postgap: 0\n                }\n            ]\n        };\n        var res = parseArray(context.parser, payload, dCellStyle(context.envName));\n        return {\n            type: \"leftright\",\n            mode: context.mode,\n            body: [\n                res\n            ],\n            left: context.envName.indexOf(\"r\") > -1 ? \".\" : \"\\\\{\",\n            right: context.envName.indexOf(\"r\") > -1 ? \"\\\\}\" : \".\",\n            rightColor: undefined\n        };\n    },\n    htmlBuilder: htmlBuilder$6,\n    mathmlBuilder: mathmlBuilder$5\n}); // In the align environment, one uses ampersands, &, to specify number of\n// columns in each row, and to locate spacing between each column.\n// align gets automatic numbering. align* and aligned do not.\n// The alignedat environment can be used in math mode.\n// Note that we assume \\nomallineskiplimit to be zero,\n// so that \\strut@ is the same as \\strut.\ndefineEnvironment({\n    type: \"array\",\n    names: [\n        \"align\",\n        \"align*\",\n        \"aligned\",\n        \"split\"\n    ],\n    props: {\n        numArgs: 0\n    },\n    handler: alignedHandler,\n    htmlBuilder: htmlBuilder$6,\n    mathmlBuilder: mathmlBuilder$5\n}); // A gathered environment is like an array environment with one centered\n// column, but where rows are considered lines so get \\jot line spacing\n// and contents are set in \\displaystyle.\ndefineEnvironment({\n    type: \"array\",\n    names: [\n        \"gathered\",\n        \"gather\",\n        \"gather*\"\n    ],\n    props: {\n        numArgs: 0\n    },\n    handler (context) {\n        if (utils.contains([\n            \"gather\",\n            \"gather*\"\n        ], context.envName)) {\n            validateAmsEnvironmentContext(context);\n        }\n        var res = {\n            cols: [\n                {\n                    type: \"align\",\n                    align: \"c\"\n                }\n            ],\n            addJot: true,\n            colSeparationType: \"gather\",\n            autoTag: getAutoTag(context.envName),\n            emptySingleRow: true,\n            leqno: context.parser.settings.leqno\n        };\n        return parseArray(context.parser, res, \"display\");\n    },\n    htmlBuilder: htmlBuilder$6,\n    mathmlBuilder: mathmlBuilder$5\n}); // alignat environment is like an align environment, but one must explicitly\n// specify maximum number of columns in each row, and can adjust spacing between\n// each columns.\ndefineEnvironment({\n    type: \"array\",\n    names: [\n        \"alignat\",\n        \"alignat*\",\n        \"alignedat\"\n    ],\n    props: {\n        numArgs: 1\n    },\n    handler: alignedHandler,\n    htmlBuilder: htmlBuilder$6,\n    mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n    type: \"array\",\n    names: [\n        \"equation\",\n        \"equation*\"\n    ],\n    props: {\n        numArgs: 0\n    },\n    handler (context) {\n        validateAmsEnvironmentContext(context);\n        var res = {\n            autoTag: getAutoTag(context.envName),\n            emptySingleRow: true,\n            singleRow: true,\n            maxNumCols: 1,\n            leqno: context.parser.settings.leqno\n        };\n        return parseArray(context.parser, res, \"display\");\n    },\n    htmlBuilder: htmlBuilder$6,\n    mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n    type: \"array\",\n    names: [\n        \"CD\"\n    ],\n    props: {\n        numArgs: 0\n    },\n    handler (context) {\n        validateAmsEnvironmentContext(context);\n        return parseCD(context.parser);\n    },\n    htmlBuilder: htmlBuilder$6,\n    mathmlBuilder: mathmlBuilder$5\n});\ndefineMacro(\"\\\\nonumber\", \"\\\\gdef\\\\@eqnsw{0}\");\ndefineMacro(\"\\\\notag\", \"\\\\nonumber\"); // Catch \\hline outside array environment\ndefineFunction({\n    type: \"text\",\n    // Doesn't matter what this is.\n    names: [\n        \"\\\\hline\",\n        \"\\\\hdashline\"\n    ],\n    props: {\n        numArgs: 0,\n        allowedInText: true,\n        allowedInMath: true\n    },\n    handler (context, args) {\n        throw new ParseError(context.funcName + \" valid only within array environment\");\n    }\n});\nvar environments = _environments;\n// defineEnvironment definitions.\ndefineFunction({\n    type: \"environment\",\n    names: [\n        \"\\\\begin\",\n        \"\\\\end\"\n    ],\n    props: {\n        numArgs: 1,\n        argTypes: [\n            \"text\"\n        ]\n    },\n    handler (_ref, args) {\n        var { parser, funcName } = _ref;\n        var nameGroup = args[0];\n        if (nameGroup.type !== \"ordgroup\") {\n            throw new ParseError(\"Invalid environment name\", nameGroup);\n        }\n        var envName = \"\";\n        for(var i = 0; i < nameGroup.body.length; ++i){\n            envName += assertNodeType(nameGroup.body[i], \"textord\").text;\n        }\n        if (funcName === \"\\\\begin\") {\n            // begin...end is similar to left...right\n            if (!environments.hasOwnProperty(envName)) {\n                throw new ParseError(\"No such environment: \" + envName, nameGroup);\n            } // Build the environment object. Arguments and other information will\n            // be made available to the begin and end methods using properties.\n            var env = environments[envName];\n            var { args: _args, optArgs } = parser.parseArguments(\"\\\\begin{\" + envName + \"}\", env);\n            var context = {\n                mode: parser.mode,\n                envName,\n                parser\n            };\n            var result = env.handler(context, _args, optArgs);\n            parser.expect(\"\\\\end\", false);\n            var endNameToken = parser.nextToken;\n            var end = assertNodeType(parser.parseFunction(), \"environment\");\n            if (end.name !== envName) {\n                throw new ParseError(\"Mismatch: \\\\begin{\" + envName + \"} matched by \\\\end{\" + end.name + \"}\", endNameToken);\n            } // $FlowFixMe, \"environment\" handler returns an environment ParseNode\n            return result;\n        }\n        return {\n            type: \"environment\",\n            mode: parser.mode,\n            name: envName,\n            nameGroup\n        };\n    }\n});\n// TODO(kevinb): implement \\\\sl and \\\\sc\nvar htmlBuilder$5 = (group, options)=>{\n    var font = group.font;\n    var newOptions = options.withFont(font);\n    return buildGroup$1(group.body, newOptions);\n};\nvar mathmlBuilder$4 = (group, options)=>{\n    var font = group.font;\n    var newOptions = options.withFont(font);\n    return buildGroup(group.body, newOptions);\n};\nvar fontAliases = {\n    \"\\\\Bbb\": \"\\\\mathbb\",\n    \"\\\\bold\": \"\\\\mathbf\",\n    \"\\\\frak\": \"\\\\mathfrak\",\n    \"\\\\bm\": \"\\\\boldsymbol\"\n};\ndefineFunction({\n    type: \"font\",\n    names: [\n        \"\\\\mathrm\",\n        \"\\\\mathit\",\n        \"\\\\mathbf\",\n        \"\\\\mathnormal\",\n        \"\\\\mathbb\",\n        \"\\\\mathcal\",\n        \"\\\\mathfrak\",\n        \"\\\\mathscr\",\n        \"\\\\mathsf\",\n        \"\\\\mathtt\",\n        \"\\\\Bbb\",\n        \"\\\\bold\",\n        \"\\\\frak\"\n    ],\n    props: {\n        numArgs: 1,\n        allowedInArgument: true\n    },\n    handler: (_ref, args)=>{\n        var { parser, funcName } = _ref;\n        var body = normalizeArgument(args[0]);\n        var func = funcName;\n        if (func in fontAliases) {\n            func = fontAliases[func];\n        }\n        return {\n            type: \"font\",\n            mode: parser.mode,\n            font: func.slice(1),\n            body\n        };\n    },\n    htmlBuilder: htmlBuilder$5,\n    mathmlBuilder: mathmlBuilder$4\n});\ndefineFunction({\n    type: \"mclass\",\n    names: [\n        \"\\\\boldsymbol\",\n        \"\\\\bm\"\n    ],\n    props: {\n        numArgs: 1\n    },\n    handler: (_ref2, args)=>{\n        var { parser } = _ref2;\n        var body = args[0];\n        var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \\boldsymbol uses \\binrel spacing to inherit the\n        // argument's bin|rel|ord status\n        return {\n            type: \"mclass\",\n            mode: parser.mode,\n            mclass: binrelClass(body),\n            body: [\n                {\n                    type: \"font\",\n                    mode: parser.mode,\n                    font: \"boldsymbol\",\n                    body\n                }\n            ],\n            isCharacterBox: isCharacterBox\n        };\n    }\n}); // Old font changing functions\ndefineFunction({\n    type: \"font\",\n    names: [\n        \"\\\\rm\",\n        \"\\\\sf\",\n        \"\\\\tt\",\n        \"\\\\bf\",\n        \"\\\\it\",\n        \"\\\\cal\"\n    ],\n    props: {\n        numArgs: 0,\n        allowedInText: true\n    },\n    handler: (_ref3, args)=>{\n        var { parser, funcName, breakOnTokenText } = _ref3;\n        var { mode } = parser;\n        var body = parser.parseExpression(true, breakOnTokenText);\n        var style = \"math\" + funcName.slice(1);\n        return {\n            type: \"font\",\n            mode: mode,\n            font: style,\n            body: {\n                type: \"ordgroup\",\n                mode: parser.mode,\n                body\n            }\n        };\n    },\n    htmlBuilder: htmlBuilder$5,\n    mathmlBuilder: mathmlBuilder$4\n});\nvar adjustStyle = (size, originalStyle)=>{\n    // Figure out what style this fraction should be in based on the\n    // function used\n    var style = originalStyle;\n    if (size === \"display\") {\n        // Get display style as a default.\n        // If incoming style is sub/sup, use style.text() to get correct size.\n        style = style.id >= Style$1.SCRIPT.id ? style.text() : Style$1.DISPLAY;\n    } else if (size === \"text\" && style.size === Style$1.DISPLAY.size) {\n        // We're in a \\tfrac but incoming style is displaystyle, so:\n        style = Style$1.TEXT;\n    } else if (size === \"script\") {\n        style = Style$1.SCRIPT;\n    } else if (size === \"scriptscript\") {\n        style = Style$1.SCRIPTSCRIPT;\n    }\n    return style;\n};\nvar htmlBuilder$4 = (group, options)=>{\n    // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).\n    var style = adjustStyle(group.size, options.style);\n    var nstyle = style.fracNum();\n    var dstyle = style.fracDen();\n    var newOptions;\n    newOptions = options.havingStyle(nstyle);\n    var numerm = buildGroup$1(group.numer, newOptions, options);\n    if (group.continued) {\n        // \\cfrac inserts a \\strut into the numerator.\n        // Get \\strut dimensions from TeXbook page 353.\n        var hStrut = 8.5 / options.fontMetrics().ptPerEm;\n        var dStrut = 3.5 / options.fontMetrics().ptPerEm;\n        numerm.height = numerm.height < hStrut ? hStrut : numerm.height;\n        numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;\n    }\n    newOptions = options.havingStyle(dstyle);\n    var denomm = buildGroup$1(group.denom, newOptions, options);\n    var rule;\n    var ruleWidth;\n    var ruleSpacing;\n    if (group.hasBarLine) {\n        if (group.barSize) {\n            ruleWidth = calculateSize(group.barSize, options);\n            rule = buildCommon.makeLineSpan(\"frac-line\", options, ruleWidth);\n        } else {\n            rule = buildCommon.makeLineSpan(\"frac-line\", options);\n        }\n        ruleWidth = rule.height;\n        ruleSpacing = rule.height;\n    } else {\n        rule = null;\n        ruleWidth = 0;\n        ruleSpacing = options.fontMetrics().defaultRuleThickness;\n    } // Rule 15b\n    var numShift;\n    var clearance;\n    var denomShift;\n    if (style.size === Style$1.DISPLAY.size || group.size === \"display\") {\n        numShift = options.fontMetrics().num1;\n        if (ruleWidth > 0) {\n            clearance = 3 * ruleSpacing;\n        } else {\n            clearance = 7 * ruleSpacing;\n        }\n        denomShift = options.fontMetrics().denom1;\n    } else {\n        if (ruleWidth > 0) {\n            numShift = options.fontMetrics().num2;\n            clearance = ruleSpacing;\n        } else {\n            numShift = options.fontMetrics().num3;\n            clearance = 3 * ruleSpacing;\n        }\n        denomShift = options.fontMetrics().denom2;\n    }\n    var frac;\n    if (!rule) {\n        // Rule 15c\n        var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);\n        if (candidateClearance < clearance) {\n            numShift += 0.5 * (clearance - candidateClearance);\n            denomShift += 0.5 * (clearance - candidateClearance);\n        }\n        frac = buildCommon.makeVList({\n            positionType: \"individualShift\",\n            children: [\n                {\n                    type: \"elem\",\n                    elem: denomm,\n                    shift: denomShift\n                },\n                {\n                    type: \"elem\",\n                    elem: numerm,\n                    shift: -numShift\n                }\n            ]\n        }, options);\n    } else {\n        // Rule 15d\n        var axisHeight = options.fontMetrics().axisHeight;\n        if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {\n            numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));\n        }\n        if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {\n            denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));\n        }\n        var midShift = -(axisHeight - 0.5 * ruleWidth);\n        frac = buildCommon.makeVList({\n            positionType: \"individualShift\",\n            children: [\n                {\n                    type: \"elem\",\n                    elem: denomm,\n                    shift: denomShift\n                },\n                {\n                    type: \"elem\",\n                    elem: rule,\n                    shift: midShift\n                },\n                {\n                    type: \"elem\",\n                    elem: numerm,\n                    shift: -numShift\n                }\n            ]\n        }, options);\n    } // Since we manually change the style sometimes (with \\dfrac or \\tfrac),\n    // account for the possible size change here.\n    newOptions = options.havingStyle(style);\n    frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;\n    frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e\n    var delimSize;\n    if (style.size === Style$1.DISPLAY.size) {\n        delimSize = options.fontMetrics().delim1;\n    } else if (style.size === Style$1.SCRIPTSCRIPT.size) {\n        delimSize = options.havingStyle(Style$1.SCRIPT).fontMetrics().delim2;\n    } else {\n        delimSize = options.fontMetrics().delim2;\n    }\n    var leftDelim;\n    var rightDelim;\n    if (group.leftDelim == null) {\n        leftDelim = makeNullDelimiter(options, [\n            \"mopen\"\n        ]);\n    } else {\n        leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, [\n            \"mopen\"\n        ]);\n    }\n    if (group.continued) {\n        rightDelim = buildCommon.makeSpan([]); // zero width for \\cfrac\n    } else if (group.rightDelim == null) {\n        rightDelim = makeNullDelimiter(options, [\n            \"mclose\"\n        ]);\n    } else {\n        rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, [\n            \"mclose\"\n        ]);\n    }\n    return buildCommon.makeSpan([\n        \"mord\"\n    ].concat(newOptions.sizingClasses(options)), [\n        leftDelim,\n        buildCommon.makeSpan([\n            \"mfrac\"\n        ], [\n            frac\n        ]),\n        rightDelim\n    ], options);\n};\nvar mathmlBuilder$3 = (group, options)=>{\n    var node = new mathMLTree.MathNode(\"mfrac\", [\n        buildGroup(group.numer, options),\n        buildGroup(group.denom, options)\n    ]);\n    if (!group.hasBarLine) {\n        node.setAttribute(\"linethickness\", \"0px\");\n    } else if (group.barSize) {\n        var ruleWidth = calculateSize(group.barSize, options);\n        node.setAttribute(\"linethickness\", makeEm(ruleWidth));\n    }\n    var style = adjustStyle(group.size, options.style);\n    if (style.size !== options.style.size) {\n        node = new mathMLTree.MathNode(\"mstyle\", [\n            node\n        ]);\n        var isDisplay = style.size === Style$1.DISPLAY.size ? \"true\" : \"false\";\n        node.setAttribute(\"displaystyle\", isDisplay);\n        node.setAttribute(\"scriptlevel\", \"0\");\n    }\n    if (group.leftDelim != null || group.rightDelim != null) {\n        var withDelims = [];\n        if (group.leftDelim != null) {\n            var leftOp = new mathMLTree.MathNode(\"mo\", [\n                new mathMLTree.TextNode(group.leftDelim.replace(\"\\\\\", \"\"))\n            ]);\n            leftOp.setAttribute(\"fence\", \"true\");\n            withDelims.push(leftOp);\n        }\n        withDelims.push(node);\n        if (group.rightDelim != null) {\n            var rightOp = new mathMLTree.MathNode(\"mo\", [\n                new mathMLTree.TextNode(group.rightDelim.replace(\"\\\\\", \"\"))\n            ]);\n            rightOp.setAttribute(\"fence\", \"true\");\n            withDelims.push(rightOp);\n        }\n        return makeRow(withDelims);\n    }\n    return node;\n};\ndefineFunction({\n    type: \"genfrac\",\n    names: [\n        \"\\\\dfrac\",\n        \"\\\\frac\",\n        \"\\\\tfrac\",\n        \"\\\\dbinom\",\n        \"\\\\binom\",\n        \"\\\\tbinom\",\n        \"\\\\\\\\atopfrac\",\n        \"\\\\\\\\bracefrac\",\n        \"\\\\\\\\brackfrac\" // ditto\n    ],\n    props: {\n        numArgs: 2,\n        allowedInArgument: true\n    },\n    handler: (_ref, args)=>{\n        var { parser, funcName } = _ref;\n        var numer = args[0];\n        var denom = args[1];\n        var hasBarLine;\n        var leftDelim = null;\n        var rightDelim = null;\n        var size = \"auto\";\n        switch(funcName){\n            case \"\\\\dfrac\":\n            case \"\\\\frac\":\n            case \"\\\\tfrac\":\n                hasBarLine = true;\n                break;\n            case \"\\\\\\\\atopfrac\":\n                hasBarLine = false;\n                break;\n            case \"\\\\dbinom\":\n            case \"\\\\binom\":\n            case \"\\\\tbinom\":\n                hasBarLine = false;\n                leftDelim = \"(\";\n                rightDelim = \")\";\n                break;\n            case \"\\\\\\\\bracefrac\":\n                hasBarLine = false;\n                leftDelim = \"\\\\{\";\n                rightDelim = \"\\\\}\";\n                break;\n            case \"\\\\\\\\brackfrac\":\n                hasBarLine = false;\n                leftDelim = \"[\";\n                rightDelim = \"]\";\n                break;\n            default:\n                throw new Error(\"Unrecognized genfrac command\");\n        }\n        switch(funcName){\n            case \"\\\\dfrac\":\n            case \"\\\\dbinom\":\n                size = \"display\";\n                break;\n            case \"\\\\tfrac\":\n            case \"\\\\tbinom\":\n                size = \"text\";\n                break;\n        }\n        return {\n            type: \"genfrac\",\n            mode: parser.mode,\n            continued: false,\n            numer,\n            denom,\n            hasBarLine,\n            leftDelim,\n            rightDelim,\n            size,\n            barSize: null\n        };\n    },\n    htmlBuilder: htmlBuilder$4,\n    mathmlBuilder: mathmlBuilder$3\n});\ndefineFunction({\n    type: \"genfrac\",\n    names: [\n        \"\\\\cfrac\"\n    ],\n    props: {\n        numArgs: 2\n    },\n    handler: (_ref2, args)=>{\n        var { parser, funcName } = _ref2;\n        var numer = args[0];\n        var denom = args[1];\n        return {\n            type: \"genfrac\",\n            mode: parser.mode,\n            continued: true,\n            numer,\n            denom,\n            hasBarLine: true,\n            leftDelim: null,\n            rightDelim: null,\n            size: \"display\",\n            barSize: null\n        };\n    }\n}); // Infix generalized fractions -- these are not rendered directly, but replaced\n// immediately by one of the variants above.\ndefineFunction({\n    type: \"infix\",\n    names: [\n        \"\\\\over\",\n        \"\\\\choose\",\n        \"\\\\atop\",\n        \"\\\\brace\",\n        \"\\\\brack\"\n    ],\n    props: {\n        numArgs: 0,\n        infix: true\n    },\n    handler (_ref3) {\n        var { parser, funcName, token } = _ref3;\n        var replaceWith;\n        switch(funcName){\n            case \"\\\\over\":\n                replaceWith = \"\\\\frac\";\n                break;\n            case \"\\\\choose\":\n                replaceWith = \"\\\\binom\";\n                break;\n            case \"\\\\atop\":\n                replaceWith = \"\\\\\\\\atopfrac\";\n                break;\n            case \"\\\\brace\":\n                replaceWith = \"\\\\\\\\bracefrac\";\n                break;\n            case \"\\\\brack\":\n                replaceWith = \"\\\\\\\\brackfrac\";\n                break;\n            default:\n                throw new Error(\"Unrecognized infix genfrac command\");\n        }\n        return {\n            type: \"infix\",\n            mode: parser.mode,\n            replaceWith,\n            token\n        };\n    }\n});\nvar stylArray = [\n    \"display\",\n    \"text\",\n    \"script\",\n    \"scriptscript\"\n];\nvar delimFromValue = function delimFromValue(delimString) {\n    var delim = null;\n    if (delimString.length > 0) {\n        delim = delimString;\n        delim = delim === \".\" ? null : delim;\n    }\n    return delim;\n};\ndefineFunction({\n    type: \"genfrac\",\n    names: [\n        \"\\\\genfrac\"\n    ],\n    props: {\n        numArgs: 6,\n        allowedInArgument: true,\n        argTypes: [\n            \"math\",\n            \"math\",\n            \"size\",\n            \"text\",\n            \"math\",\n            \"math\"\n        ]\n    },\n    handler (_ref4, args) {\n        var { parser } = _ref4;\n        var numer = args[4];\n        var denom = args[5]; // Look into the parse nodes to get the desired delimiters.\n        var leftNode = normalizeArgument(args[0]);\n        var leftDelim = leftNode.type === \"atom\" && leftNode.family === \"open\" ? delimFromValue(leftNode.text) : null;\n        var rightNode = normalizeArgument(args[1]);\n        var rightDelim = rightNode.type === \"atom\" && rightNode.family === \"close\" ? delimFromValue(rightNode.text) : null;\n        var barNode = assertNodeType(args[2], \"size\");\n        var hasBarLine;\n        var barSize = null;\n        if (barNode.isBlank) {\n            // \\genfrac acts differently than \\above.\n            // \\genfrac treats an empty size group as a signal to use a\n            // standard bar size. \\above would see size = 0 and omit the bar.\n            hasBarLine = true;\n        } else {\n            barSize = barNode.value;\n            hasBarLine = barSize.number > 0;\n        } // Find out if we want displaystyle, textstyle, etc.\n        var size = \"auto\";\n        var styl = args[3];\n        if (styl.type === \"ordgroup\") {\n            if (styl.body.length > 0) {\n                var textOrd = assertNodeType(styl.body[0], \"textord\");\n                size = stylArray[Number(textOrd.text)];\n            }\n        } else {\n            styl = assertNodeType(styl, \"textord\");\n            size = stylArray[Number(styl.text)];\n        }\n        return {\n            type: \"genfrac\",\n            mode: parser.mode,\n            numer,\n            denom,\n            continued: false,\n            hasBarLine,\n            barSize,\n            leftDelim,\n            rightDelim,\n            size\n        };\n    },\n    htmlBuilder: htmlBuilder$4,\n    mathmlBuilder: mathmlBuilder$3\n}); // \\above is an infix fraction that also defines a fraction bar size.\ndefineFunction({\n    type: \"infix\",\n    names: [\n        \"\\\\above\"\n    ],\n    props: {\n        numArgs: 1,\n        argTypes: [\n            \"size\"\n        ],\n        infix: true\n    },\n    handler (_ref5, args) {\n        var { parser, funcName, token } = _ref5;\n        return {\n            type: \"infix\",\n            mode: parser.mode,\n            replaceWith: \"\\\\\\\\abovefrac\",\n            size: assertNodeType(args[0], \"size\").value,\n            token\n        };\n    }\n});\ndefineFunction({\n    type: \"genfrac\",\n    names: [\n        \"\\\\\\\\abovefrac\"\n    ],\n    props: {\n        numArgs: 3,\n        argTypes: [\n            \"math\",\n            \"size\",\n            \"math\"\n        ]\n    },\n    handler: (_ref6, args)=>{\n        var { parser, funcName } = _ref6;\n        var numer = args[0];\n        var barSize = assert(assertNodeType(args[1], \"infix\").size);\n        var denom = args[2];\n        var hasBarLine = barSize.number > 0;\n        return {\n            type: \"genfrac\",\n            mode: parser.mode,\n            numer,\n            denom,\n            continued: false,\n            hasBarLine,\n            barSize,\n            leftDelim: null,\n            rightDelim: null,\n            size: \"auto\"\n        };\n    },\n    htmlBuilder: htmlBuilder$4,\n    mathmlBuilder: mathmlBuilder$3\n});\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"horizBrace\", but\n// also \"supsub\" since an over/underbrace can affect super/subscripting.\nvar htmlBuilder$3 = (grp, options)=>{\n    var style = options.style; // Pull out the `ParseNode<\"horizBrace\">` if `grp` is a \"supsub\" node.\n    var supSubGroup;\n    var group;\n    if (grp.type === \"supsub\") {\n        // Ref: LaTeX source2e: }}}}\\limits}\n        // i.e. LaTeX treats the brace similar to an op and passes it\n        // with \\limits, so we need to assign supsub style.\n        supSubGroup = grp.sup ? buildGroup$1(grp.sup, options.havingStyle(style.sup()), options) : buildGroup$1(grp.sub, options.havingStyle(style.sub()), options);\n        group = assertNodeType(grp.base, \"horizBrace\");\n    } else {\n        group = assertNodeType(grp, \"horizBrace\");\n    } // Build the base group\n    var body = buildGroup$1(group.base, options.havingBaseStyle(Style$1.DISPLAY)); // Create the stretchy element\n    var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns        ┏━━━━━━━━┓\n    // This first vlist contains the content and the brace:   equation\n    var vlist;\n    if (group.isOver) {\n        vlist = buildCommon.makeVList({\n            positionType: \"firstBaseline\",\n            children: [\n                {\n                    type: \"elem\",\n                    elem: body\n                },\n                {\n                    type: \"kern\",\n                    size: 0.1\n                },\n                {\n                    type: \"elem\",\n                    elem: braceBody\n                }\n            ]\n        }, options); // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n        vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n    } else {\n        vlist = buildCommon.makeVList({\n            positionType: \"bottom\",\n            positionData: body.depth + 0.1 + braceBody.height,\n            children: [\n                {\n                    type: \"elem\",\n                    elem: braceBody\n                },\n                {\n                    type: \"kern\",\n                    size: 0.1\n                },\n                {\n                    type: \"elem\",\n                    elem: body\n                }\n            ]\n        }, options); // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n        vlist.children[0].children[0].children[0].classes.push(\"svg-align\");\n    }\n    if (supSubGroup) {\n        // To write the supsub, wrap the first vlist in another vlist:\n        // They can't all go in the same vlist, because the note might be\n        // wider than the equation. We want the equation to control the\n        // brace width.\n        //      note          long note           long note\n        //   ┏━━━━━━━━┓   or    ┏━━━┓     not    ┏━━━━━━━━━┓\n        //    equation           eqn                 eqn\n        var vSpan = buildCommon.makeSpan([\n            \"mord\",\n            group.isOver ? \"mover\" : \"munder\"\n        ], [\n            vlist\n        ], options);\n        if (group.isOver) {\n            vlist = buildCommon.makeVList({\n                positionType: \"firstBaseline\",\n                children: [\n                    {\n                        type: \"elem\",\n                        elem: vSpan\n                    },\n                    {\n                        type: \"kern\",\n                        size: 0.2\n                    },\n                    {\n                        type: \"elem\",\n                        elem: supSubGroup\n                    }\n                ]\n            }, options);\n        } else {\n            vlist = buildCommon.makeVList({\n                positionType: \"bottom\",\n                positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth,\n                children: [\n                    {\n                        type: \"elem\",\n                        elem: supSubGroup\n                    },\n                    {\n                        type: \"kern\",\n                        size: 0.2\n                    },\n                    {\n                        type: \"elem\",\n                        elem: vSpan\n                    }\n                ]\n            }, options);\n        }\n    }\n    return buildCommon.makeSpan([\n        \"mord\",\n        group.isOver ? \"mover\" : \"munder\"\n    ], [\n        vlist\n    ], options);\n};\nvar mathmlBuilder$2 = (group, options)=>{\n    var accentNode = stretchy.mathMLnode(group.label);\n    return new mathMLTree.MathNode(group.isOver ? \"mover\" : \"munder\", [\n        buildGroup(group.base, options),\n        accentNode\n    ]);\n}; // Horizontal stretchy braces\ndefineFunction({\n    type: \"horizBrace\",\n    names: [\n        \"\\\\overbrace\",\n        \"\\\\underbrace\"\n    ],\n    props: {\n        numArgs: 1\n    },\n    handler (_ref, args) {\n        var { parser, funcName } = _ref;\n        return {\n            type: \"horizBrace\",\n            mode: parser.mode,\n            label: funcName,\n            isOver: /^\\\\over/.test(funcName),\n            base: args[0]\n        };\n    },\n    htmlBuilder: htmlBuilder$3,\n    mathmlBuilder: mathmlBuilder$2\n});\ndefineFunction({\n    type: \"href\",\n    names: [\n        \"\\\\href\"\n    ],\n    props: {\n        numArgs: 2,\n        argTypes: [\n            \"url\",\n            \"original\"\n        ],\n        allowedInText: true\n    },\n    handler: (_ref, args)=>{\n        var { parser } = _ref;\n        var body = args[1];\n        var href = assertNodeType(args[0], \"url\").url;\n        if (!parser.settings.isTrusted({\n            command: \"\\\\href\",\n            url: href\n        })) {\n            return parser.formatUnsupportedCmd(\"\\\\href\");\n        }\n        return {\n            type: \"href\",\n            mode: parser.mode,\n            href,\n            body: ordargument(body)\n        };\n    },\n    htmlBuilder: (group, options)=>{\n        var elements = buildExpression$1(group.body, options, false);\n        return buildCommon.makeAnchor(group.href, [], elements, options);\n    },\n    mathmlBuilder: (group, options)=>{\n        var math = buildExpressionRow(group.body, options);\n        if (!(math instanceof MathNode)) {\n            math = new MathNode(\"mrow\", [\n                math\n            ]);\n        }\n        math.setAttribute(\"href\", group.href);\n        return math;\n    }\n});\ndefineFunction({\n    type: \"href\",\n    names: [\n        \"\\\\url\"\n    ],\n    props: {\n        numArgs: 1,\n        argTypes: [\n            \"url\"\n        ],\n        allowedInText: true\n    },\n    handler: (_ref2, args)=>{\n        var { parser } = _ref2;\n        var href = assertNodeType(args[0], \"url\").url;\n        if (!parser.settings.isTrusted({\n            command: \"\\\\url\",\n            url: href\n        })) {\n            return parser.formatUnsupportedCmd(\"\\\\url\");\n        }\n        var chars = [];\n        for(var i = 0; i < href.length; i++){\n            var c = href[i];\n            if (c === \"~\") {\n                c = \"\\\\textasciitilde\";\n            }\n            chars.push({\n                type: \"textord\",\n                mode: \"text\",\n                text: c\n            });\n        }\n        var body = {\n            type: \"text\",\n            mode: parser.mode,\n            font: \"\\\\texttt\",\n            body: chars\n        };\n        return {\n            type: \"href\",\n            mode: parser.mode,\n            href,\n            body: ordargument(body)\n        };\n    }\n});\n// In LaTeX, \\vcenter can act only on a box, as in\n// \\vcenter{\\hbox{$\\frac{a+b}{\\dfrac{c}{d}}$}}\n// This function by itself doesn't do anything but prevent a soft line break.\ndefineFunction({\n    type: \"hbox\",\n    names: [\n        \"\\\\hbox\"\n    ],\n    props: {\n        numArgs: 1,\n        argTypes: [\n            \"text\"\n        ],\n        allowedInText: true,\n        primitive: true\n    },\n    handler (_ref, args) {\n        var { parser } = _ref;\n        return {\n            type: \"hbox\",\n            mode: parser.mode,\n            body: ordargument(args[0])\n        };\n    },\n    htmlBuilder (group, options) {\n        var elements = buildExpression$1(group.body, options, false);\n        return buildCommon.makeFragment(elements);\n    },\n    mathmlBuilder (group, options) {\n        return new mathMLTree.MathNode(\"mrow\", buildExpression(group.body, options));\n    }\n});\ndefineFunction({\n    type: \"html\",\n    names: [\n        \"\\\\htmlClass\",\n        \"\\\\htmlId\",\n        \"\\\\htmlStyle\",\n        \"\\\\htmlData\"\n    ],\n    props: {\n        numArgs: 2,\n        argTypes: [\n            \"raw\",\n            \"original\"\n        ],\n        allowedInText: true\n    },\n    handler: (_ref, args)=>{\n        var { parser, funcName, token } = _ref;\n        var value = assertNodeType(args[0], \"raw\").string;\n        var body = args[1];\n        if (parser.settings.strict) {\n            parser.settings.reportNonstrict(\"htmlExtension\", \"HTML extension is disabled on strict mode\");\n        }\n        var trustContext;\n        var attributes = {};\n        switch(funcName){\n            case \"\\\\htmlClass\":\n                attributes.class = value;\n                trustContext = {\n                    command: \"\\\\htmlClass\",\n                    class: value\n                };\n                break;\n            case \"\\\\htmlId\":\n                attributes.id = value;\n                trustContext = {\n                    command: \"\\\\htmlId\",\n                    id: value\n                };\n                break;\n            case \"\\\\htmlStyle\":\n                attributes.style = value;\n                trustContext = {\n                    command: \"\\\\htmlStyle\",\n                    style: value\n                };\n                break;\n            case \"\\\\htmlData\":\n                {\n                    var data = value.split(\",\");\n                    for(var i = 0; i < data.length; i++){\n                        var keyVal = data[i].split(\"=\");\n                        if (keyVal.length !== 2) {\n                            throw new ParseError(\"Error parsing key-value for \\\\htmlData\");\n                        }\n                        attributes[\"data-\" + keyVal[0].trim()] = keyVal[1].trim();\n                    }\n                    trustContext = {\n                        command: \"\\\\htmlData\",\n                        attributes\n                    };\n                    break;\n                }\n            default:\n                throw new Error(\"Unrecognized html command\");\n        }\n        if (!parser.settings.isTrusted(trustContext)) {\n            return parser.formatUnsupportedCmd(funcName);\n        }\n        return {\n            type: \"html\",\n            mode: parser.mode,\n            attributes,\n            body: ordargument(body)\n        };\n    },\n    htmlBuilder: (group, options)=>{\n        var elements = buildExpression$1(group.body, options, false);\n        var classes = [\n            \"enclosing\"\n        ];\n        if (group.attributes.class) {\n            classes.push(...group.attributes.class.trim().split(/\\s+/));\n        }\n        var span = buildCommon.makeSpan(classes, elements, options);\n        for(var attr in group.attributes){\n            if (attr !== \"class\" && group.attributes.hasOwnProperty(attr)) {\n                span.setAttribute(attr, group.attributes[attr]);\n            }\n        }\n        return span;\n    },\n    mathmlBuilder: (group, options)=>{\n        return buildExpressionRow(group.body, options);\n    }\n});\ndefineFunction({\n    type: \"htmlmathml\",\n    names: [\n        \"\\\\html@mathml\"\n    ],\n    props: {\n        numArgs: 2,\n        allowedInText: true\n    },\n    handler: (_ref, args)=>{\n        var { parser } = _ref;\n        return {\n            type: \"htmlmathml\",\n            mode: parser.mode,\n            html: ordargument(args[0]),\n            mathml: ordargument(args[1])\n        };\n    },\n    htmlBuilder: (group, options)=>{\n        var elements = buildExpression$1(group.html, options, false);\n        return buildCommon.makeFragment(elements);\n    },\n    mathmlBuilder: (group, options)=>{\n        return buildExpressionRow(group.mathml, options);\n    }\n});\nvar sizeData = function sizeData(str) {\n    if (/^[-+]? *(\\d+(\\.\\d*)?|\\.\\d+)$/.test(str)) {\n        // str is a number with no unit specified.\n        // default unit is bp, per graphix package.\n        return {\n            number: +str,\n            unit: \"bp\"\n        };\n    } else {\n        var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(str);\n        if (!match) {\n            throw new ParseError(\"Invalid size: '\" + str + \"' in \\\\includegraphics\");\n        }\n        var data = {\n            number: +(match[1] + match[2]),\n            // sign + magnitude, cast to number\n            unit: match[3]\n        };\n        if (!validUnit(data)) {\n            throw new ParseError(\"Invalid unit: '\" + data.unit + \"' in \\\\includegraphics.\");\n        }\n        return data;\n    }\n};\ndefineFunction({\n    type: \"includegraphics\",\n    names: [\n        \"\\\\includegraphics\"\n    ],\n    props: {\n        numArgs: 1,\n        numOptionalArgs: 1,\n        argTypes: [\n            \"raw\",\n            \"url\"\n        ],\n        allowedInText: false\n    },\n    handler: (_ref, args, optArgs)=>{\n        var { parser } = _ref;\n        var width = {\n            number: 0,\n            unit: \"em\"\n        };\n        var height = {\n            number: 0.9,\n            unit: \"em\"\n        }; // sorta character sized.\n        var totalheight = {\n            number: 0,\n            unit: \"em\"\n        };\n        var alt = \"\";\n        if (optArgs[0]) {\n            var attributeStr = assertNodeType(optArgs[0], \"raw\").string; // Parser.js does not parse key/value pairs. We get a string.\n            var attributes = attributeStr.split(\",\");\n            for(var i = 0; i < attributes.length; i++){\n                var keyVal = attributes[i].split(\"=\");\n                if (keyVal.length === 2) {\n                    var str = keyVal[1].trim();\n                    switch(keyVal[0].trim()){\n                        case \"alt\":\n                            alt = str;\n                            break;\n                        case \"width\":\n                            width = sizeData(str);\n                            break;\n                        case \"height\":\n                            height = sizeData(str);\n                            break;\n                        case \"totalheight\":\n                            totalheight = sizeData(str);\n                            break;\n                        default:\n                            throw new ParseError(\"Invalid key: '\" + keyVal[0] + \"' in \\\\includegraphics.\");\n                    }\n                }\n            }\n        }\n        var src = assertNodeType(args[0], \"url\").url;\n        if (alt === \"\") {\n            // No alt given. Use the file name. Strip away the path.\n            alt = src;\n            alt = alt.replace(/^.*[\\\\/]/, \"\");\n            alt = alt.substring(0, alt.lastIndexOf(\".\"));\n        }\n        if (!parser.settings.isTrusted({\n            command: \"\\\\includegraphics\",\n            url: src\n        })) {\n            return parser.formatUnsupportedCmd(\"\\\\includegraphics\");\n        }\n        return {\n            type: \"includegraphics\",\n            mode: parser.mode,\n            alt: alt,\n            width: width,\n            height: height,\n            totalheight: totalheight,\n            src: src\n        };\n    },\n    htmlBuilder: (group, options)=>{\n        var height = calculateSize(group.height, options);\n        var depth = 0;\n        if (group.totalheight.number > 0) {\n            depth = calculateSize(group.totalheight, options) - height;\n        }\n        var width = 0;\n        if (group.width.number > 0) {\n            width = calculateSize(group.width, options);\n        }\n        var style = {\n            height: makeEm(height + depth)\n        };\n        if (width > 0) {\n            style.width = makeEm(width);\n        }\n        if (depth > 0) {\n            style.verticalAlign = makeEm(-depth);\n        }\n        var node = new Img(group.src, group.alt, style);\n        node.height = height;\n        node.depth = depth;\n        return node;\n    },\n    mathmlBuilder: (group, options)=>{\n        var node = new mathMLTree.MathNode(\"mglyph\", []);\n        node.setAttribute(\"alt\", group.alt);\n        var height = calculateSize(group.height, options);\n        var depth = 0;\n        if (group.totalheight.number > 0) {\n            depth = calculateSize(group.totalheight, options) - height;\n            node.setAttribute(\"valign\", makeEm(-depth));\n        }\n        node.setAttribute(\"height\", makeEm(height + depth));\n        if (group.width.number > 0) {\n            var width = calculateSize(group.width, options);\n            node.setAttribute(\"width\", makeEm(width));\n        }\n        node.setAttribute(\"src\", group.src);\n        return node;\n    }\n});\n// Horizontal spacing commands\ndefineFunction({\n    type: \"kern\",\n    names: [\n        \"\\\\kern\",\n        \"\\\\mkern\",\n        \"\\\\hskip\",\n        \"\\\\mskip\"\n    ],\n    props: {\n        numArgs: 1,\n        argTypes: [\n            \"size\"\n        ],\n        primitive: true,\n        allowedInText: true\n    },\n    handler (_ref, args) {\n        var { parser, funcName } = _ref;\n        var size = assertNodeType(args[0], \"size\");\n        if (parser.settings.strict) {\n            var mathFunction = funcName[1] === \"m\"; // \\mkern, \\mskip\n            var muUnit = size.value.unit === \"mu\";\n            if (mathFunction) {\n                if (!muUnit) {\n                    parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" supports only mu units, \" + (\"not \" + size.value.unit + \" units\"));\n                }\n                if (parser.mode !== \"math\") {\n                    parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" works only in math mode\");\n                }\n            } else {\n                // !mathFunction\n                if (muUnit) {\n                    parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" doesn't support mu units\");\n                }\n            }\n        }\n        return {\n            type: \"kern\",\n            mode: parser.mode,\n            dimension: size.value\n        };\n    },\n    htmlBuilder (group, options) {\n        return buildCommon.makeGlue(group.dimension, options);\n    },\n    mathmlBuilder (group, options) {\n        var dimension = calculateSize(group.dimension, options);\n        return new mathMLTree.SpaceNode(dimension);\n    }\n});\n// Horizontal overlap functions\ndefineFunction({\n    type: \"lap\",\n    names: [\n        \"\\\\mathllap\",\n        \"\\\\mathrlap\",\n        \"\\\\mathclap\"\n    ],\n    props: {\n        numArgs: 1,\n        allowedInText: true\n    },\n    handler: (_ref, args)=>{\n        var { parser, funcName } = _ref;\n        var body = args[0];\n        return {\n            type: \"lap\",\n            mode: parser.mode,\n            alignment: funcName.slice(5),\n            body\n        };\n    },\n    htmlBuilder: (group, options)=>{\n        // mathllap, mathrlap, mathclap\n        var inner;\n        if (group.alignment === \"clap\") {\n            // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/\n            inner = buildCommon.makeSpan([], [\n                buildGroup$1(group.body, options)\n            ]); // wrap, since CSS will center a .clap > .inner > span\n            inner = buildCommon.makeSpan([\n                \"inner\"\n            ], [\n                inner\n            ], options);\n        } else {\n            inner = buildCommon.makeSpan([\n                \"inner\"\n            ], [\n                buildGroup$1(group.body, options)\n            ]);\n        }\n        var fix = buildCommon.makeSpan([\n            \"fix\"\n        ], []);\n        var node = buildCommon.makeSpan([\n            group.alignment\n        ], [\n            inner,\n            fix\n        ], options); // At this point, we have correctly set horizontal alignment of the\n        // two items involved in the lap.\n        // Next, use a strut to set the height of the HTML bounding box.\n        // Otherwise, a tall argument may be misplaced.\n        // This code resolved issue #1153\n        var strut = buildCommon.makeSpan([\n            \"strut\"\n        ]);\n        strut.style.height = makeEm(node.height + node.depth);\n        if (node.depth) {\n            strut.style.verticalAlign = makeEm(-node.depth);\n        }\n        node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall.\n        // This code resolves issue #1234\n        node = buildCommon.makeSpan([\n            \"thinbox\"\n        ], [\n            node\n        ], options);\n        return buildCommon.makeSpan([\n            \"mord\",\n            \"vbox\"\n        ], [\n            node\n        ], options);\n    },\n    mathmlBuilder: (group, options)=>{\n        // mathllap, mathrlap, mathclap\n        var node = new mathMLTree.MathNode(\"mpadded\", [\n            buildGroup(group.body, options)\n        ]);\n        if (group.alignment !== \"rlap\") {\n            var offset = group.alignment === \"llap\" ? \"-1\" : \"-0.5\";\n            node.setAttribute(\"lspace\", offset + \"width\");\n        }\n        node.setAttribute(\"width\", \"0px\");\n        return node;\n    }\n});\ndefineFunction({\n    type: \"styling\",\n    names: [\n        \"\\\\(\",\n        \"$\"\n    ],\n    props: {\n        numArgs: 0,\n        allowedInText: true,\n        allowedInMath: false\n    },\n    handler (_ref, args) {\n        var { funcName, parser } = _ref;\n        var outerMode = parser.mode;\n        parser.switchMode(\"math\");\n        var close = funcName === \"\\\\(\" ? \"\\\\)\" : \"$\";\n        var body = parser.parseExpression(false, close);\n        parser.expect(close);\n        parser.switchMode(outerMode);\n        return {\n            type: \"styling\",\n            mode: parser.mode,\n            style: \"text\",\n            body\n        };\n    }\n}); // Check for extra closing math delimiters\ndefineFunction({\n    type: \"text\",\n    // Doesn't matter what this is.\n    names: [\n        \"\\\\)\",\n        \"\\\\]\"\n    ],\n    props: {\n        numArgs: 0,\n        allowedInText: true,\n        allowedInMath: false\n    },\n    handler (context, args) {\n        throw new ParseError(\"Mismatched \" + context.funcName);\n    }\n});\nvar chooseMathStyle = (group, options)=>{\n    switch(options.style.size){\n        case Style$1.DISPLAY.size:\n            return group.display;\n        case Style$1.TEXT.size:\n            return group.text;\n        case Style$1.SCRIPT.size:\n            return group.script;\n        case Style$1.SCRIPTSCRIPT.size:\n            return group.scriptscript;\n        default:\n            return group.text;\n    }\n};\ndefineFunction({\n    type: \"mathchoice\",\n    names: [\n        \"\\\\mathchoice\"\n    ],\n    props: {\n        numArgs: 4,\n        primitive: true\n    },\n    handler: (_ref, args)=>{\n        var { parser } = _ref;\n        return {\n            type: \"mathchoice\",\n            mode: parser.mode,\n            display: ordargument(args[0]),\n            text: ordargument(args[1]),\n            script: ordargument(args[2]),\n            scriptscript: ordargument(args[3])\n        };\n    },\n    htmlBuilder: (group, options)=>{\n        var body = chooseMathStyle(group, options);\n        var elements = buildExpression$1(body, options, false);\n        return buildCommon.makeFragment(elements);\n    },\n    mathmlBuilder: (group, options)=>{\n        var body = chooseMathStyle(group, options);\n        return buildExpressionRow(body, options);\n    }\n});\nvar assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift)=>{\n    base = buildCommon.makeSpan([], [\n        base\n    ]);\n    var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup);\n    var sub;\n    var sup; // We manually have to handle the superscripts and subscripts. This,\n    // aside from the kern calculations, is copied from supsub.\n    if (supGroup) {\n        var elem = buildGroup$1(supGroup, options.havingStyle(style.sup()), options);\n        sup = {\n            elem,\n            kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)\n        };\n    }\n    if (subGroup) {\n        var _elem = buildGroup$1(subGroup, options.havingStyle(style.sub()), options);\n        sub = {\n            elem: _elem,\n            kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height)\n        };\n    } // Build the final group as a vlist of the possible subscript, base,\n    // and possible superscript.\n    var finalGroup;\n    if (sup && sub) {\n        var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;\n        finalGroup = buildCommon.makeVList({\n            positionType: \"bottom\",\n            positionData: bottom,\n            children: [\n                {\n                    type: \"kern\",\n                    size: options.fontMetrics().bigOpSpacing5\n                },\n                {\n                    type: \"elem\",\n                    elem: sub.elem,\n                    marginLeft: makeEm(-slant)\n                },\n                {\n                    type: \"kern\",\n                    size: sub.kern\n                },\n                {\n                    type: \"elem\",\n                    elem: base\n                },\n                {\n                    type: \"kern\",\n                    size: sup.kern\n                },\n                {\n                    type: \"elem\",\n                    elem: sup.elem,\n                    marginLeft: makeEm(slant)\n                },\n                {\n                    type: \"kern\",\n                    size: options.fontMetrics().bigOpSpacing5\n                }\n            ]\n        }, options);\n    } else if (sub) {\n        var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note\n        // that we are supposed to shift the limits by 1/2 of the slant,\n        // but since we are centering the limits adding a full slant of\n        // margin will shift by 1/2 that.\n        finalGroup = buildCommon.makeVList({\n            positionType: \"top\",\n            positionData: top,\n            children: [\n                {\n                    type: \"kern\",\n                    size: options.fontMetrics().bigOpSpacing5\n                },\n                {\n                    type: \"elem\",\n                    elem: sub.elem,\n                    marginLeft: makeEm(-slant)\n                },\n                {\n                    type: \"kern\",\n                    size: sub.kern\n                },\n                {\n                    type: \"elem\",\n                    elem: base\n                }\n            ]\n        }, options);\n    } else if (sup) {\n        var _bottom = base.depth + baseShift;\n        finalGroup = buildCommon.makeVList({\n            positionType: \"bottom\",\n            positionData: _bottom,\n            children: [\n                {\n                    type: \"elem\",\n                    elem: base\n                },\n                {\n                    type: \"kern\",\n                    size: sup.kern\n                },\n                {\n                    type: \"elem\",\n                    elem: sup.elem,\n                    marginLeft: makeEm(slant)\n                },\n                {\n                    type: \"kern\",\n                    size: options.fontMetrics().bigOpSpacing5\n                }\n            ]\n        }, options);\n    } else {\n        // This case probably shouldn't occur (this would mean the\n        // supsub was sending us a group with no superscript or\n        // subscript) but be safe.\n        return base;\n    }\n    var parts = [\n        finalGroup\n    ];\n    if (sub && slant !== 0 && !subIsSingleCharacter) {\n        // A negative margin-left was applied to the lower limit.\n        // Avoid an overlap by placing a spacer on the left on the group.\n        var spacer = buildCommon.makeSpan([\n            \"mspace\"\n        ], [], options);\n        spacer.style.marginRight = makeEm(slant);\n        parts.unshift(spacer);\n    }\n    return buildCommon.makeSpan([\n        \"mop\",\n        \"op-limits\"\n    ], parts, options);\n};\n// Limits, symbols\n// Most operators have a large successor symbol, but these don't.\nvar noSuccessor = [\n    \"\\\\smallint\"\n]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only \"op\", but also\n// \"supsub\" since some of them (like \\int) can affect super/subscripting.\nvar htmlBuilder$2 = (grp, options)=>{\n    // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n    var supGroup;\n    var subGroup;\n    var hasLimits = false;\n    var group;\n    if (grp.type === \"supsub\") {\n        // If we have limits, supsub will pass us its group to handle. Pull\n        // out the superscript and subscript and set the group to the op in\n        // its base.\n        supGroup = grp.sup;\n        subGroup = grp.sub;\n        group = assertNodeType(grp.base, \"op\");\n        hasLimits = true;\n    } else {\n        group = assertNodeType(grp, \"op\");\n    }\n    var style = options.style;\n    var large = false;\n    if (style.size === Style$1.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) {\n        // Most symbol operators get larger in displaystyle (rule 13)\n        large = true;\n    }\n    var base;\n    if (group.symbol) {\n        // If this is a symbol, create the symbol.\n        var fontName = large ? \"Size2-Regular\" : \"Size1-Regular\";\n        var stash = \"\";\n        if (group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") {\n            // No font glyphs yet, so use a glyph w/o the oval.\n            // TODO: When font glyphs are available, delete this code.\n            stash = group.name.slice(1);\n            group.name = stash === \"oiint\" ? \"\\\\iint\" : \"\\\\iiint\";\n        }\n        base = buildCommon.makeSymbol(group.name, fontName, \"math\", options, [\n            \"mop\",\n            \"op-symbol\",\n            large ? \"large-op\" : \"small-op\"\n        ]);\n        if (stash.length > 0) {\n            // We're in \\oiint or \\oiiint. Overlay the oval.\n            // TODO: When font glyphs are available, delete this code.\n            var italic = base.italic;\n            var oval = buildCommon.staticSvg(stash + \"Size\" + (large ? \"2\" : \"1\"), options);\n            base = buildCommon.makeVList({\n                positionType: \"individualShift\",\n                children: [\n                    {\n                        type: \"elem\",\n                        elem: base,\n                        shift: 0\n                    },\n                    {\n                        type: \"elem\",\n                        elem: oval,\n                        shift: large ? 0.08 : 0\n                    }\n                ]\n            }, options);\n            group.name = \"\\\\\" + stash;\n            base.classes.unshift(\"mop\"); // $FlowFixMe\n            base.italic = italic;\n        }\n    } else if (group.body) {\n        // If this is a list, compose that list.\n        var inner = buildExpression$1(group.body, options, true);\n        if (inner.length === 1 && inner[0] instanceof SymbolNode) {\n            base = inner[0];\n            base.classes[0] = \"mop\"; // replace old mclass\n        } else {\n            base = buildCommon.makeSpan([\n                \"mop\"\n            ], inner, options);\n        }\n    } else {\n        // Otherwise, this is a text operator. Build the text from the\n        // operator's name.\n        var output = [];\n        for(var i = 1; i < group.name.length; i++){\n            output.push(buildCommon.mathsym(group.name[i], group.mode, options));\n        }\n        base = buildCommon.makeSpan([\n            \"mop\"\n        ], output, options);\n    } // If content of op is a single symbol, shift it vertically.\n    var baseShift = 0;\n    var slant = 0;\n    if ((base instanceof SymbolNode || group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") && !group.suppressBaseShift) {\n        // We suppress the shift of the base of \\overset and \\underset. Otherwise,\n        // shift the symbol so its center lies on the axis (rule 13). It\n        // appears that our fonts have the centers of the symbols already\n        // almost on the axis, so these numbers are very small. Note we\n        // don't actually apply this here, but instead it is used either in\n        // the vlist creation or separately when there are no limits.\n        baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction.\n        // $FlowFixMe\n        slant = base.italic;\n    }\n    if (hasLimits) {\n        return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift);\n    } else {\n        if (baseShift) {\n            base.style.position = \"relative\";\n            base.style.top = makeEm(baseShift);\n        }\n        return base;\n    }\n};\nvar mathmlBuilder$1 = (group, options)=>{\n    var node;\n    if (group.symbol) {\n        // This is a symbol. Just add the symbol.\n        node = new MathNode(\"mo\", [\n            makeText(group.name, group.mode)\n        ]);\n        if (utils.contains(noSuccessor, group.name)) {\n            node.setAttribute(\"largeop\", \"false\");\n        }\n    } else if (group.body) {\n        // This is an operator with children. Add them.\n        node = new MathNode(\"mo\", buildExpression(group.body, options));\n    } else {\n        // This is a text operator. Add all of the characters from the\n        // operator's name.\n        node = new MathNode(\"mi\", [\n            new TextNode(group.name.slice(1))\n        ]); // Append an <mo>⁡</mo>.\n        // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4\n        var operator = new MathNode(\"mo\", [\n            makeText(\"\", \"text\")\n        ]);\n        if (group.parentIsSupSub) {\n            node = new MathNode(\"mrow\", [\n                node,\n                operator\n            ]);\n        } else {\n            node = newDocumentFragment([\n                node,\n                operator\n            ]);\n        }\n    }\n    return node;\n};\nvar singleCharBigOps = {\n    \"∏\": \"\\\\prod\",\n    \"∐\": \"\\\\coprod\",\n    \"∑\": \"\\\\sum\",\n    \"⋀\": \"\\\\bigwedge\",\n    \"⋁\": \"\\\\bigvee\",\n    \"⋂\": \"\\\\bigcap\",\n    \"⋃\": \"\\\\bigcup\",\n    \"⨀\": \"\\\\bigodot\",\n    \"⨁\": \"\\\\bigoplus\",\n    \"⨂\": \"\\\\bigotimes\",\n    \"⨄\": \"\\\\biguplus\",\n    \"⨆\": \"\\\\bigsqcup\"\n};\ndefineFunction({\n    type: \"op\",\n    names: [\n        \"\\\\coprod\",\n        \"\\\\bigvee\",\n        \"\\\\bigwedge\",\n        \"\\\\biguplus\",\n        \"\\\\bigcap\",\n        \"\\\\bigcup\",\n        \"\\\\intop\",\n        \"\\\\prod\",\n        \"\\\\sum\",\n        \"\\\\bigotimes\",\n        \"\\\\bigoplus\",\n        \"\\\\bigodot\",\n        \"\\\\bigsqcup\",\n        \"\\\\smallint\",\n        \"∏\",\n        \"∐\",\n        \"∑\",\n        \"⋀\",\n        \"⋁\",\n        \"⋂\",\n        \"⋃\",\n        \"⨀\",\n        \"⨁\",\n        \"⨂\",\n        \"⨄\",\n        \"⨆\"\n    ],\n    props: {\n        numArgs: 0\n    },\n    handler: (_ref, args)=>{\n        var { parser, funcName } = _ref;\n        var fName = funcName;\n        if (fName.length === 1) {\n            fName = singleCharBigOps[fName];\n        }\n        return {\n            type: \"op\",\n            mode: parser.mode,\n            limits: true,\n            parentIsSupSub: false,\n            symbol: true,\n            name: fName\n        };\n    },\n    htmlBuilder: htmlBuilder$2,\n    mathmlBuilder: mathmlBuilder$1\n}); // Note: calling defineFunction with a type that's already been defined only\n// works because the same htmlBuilder and mathmlBuilder are being used.\ndefineFunction({\n    type: \"op\",\n    names: [\n        \"\\\\mathop\"\n    ],\n    props: {\n        numArgs: 1,\n        primitive: true\n    },\n    handler: (_ref2, args)=>{\n        var { parser } = _ref2;\n        var body = args[0];\n        return {\n            type: \"op\",\n            mode: parser.mode,\n            limits: false,\n            parentIsSupSub: false,\n            symbol: false,\n            body: ordargument(body)\n        };\n    },\n    htmlBuilder: htmlBuilder$2,\n    mathmlBuilder: mathmlBuilder$1\n}); // There are 2 flags for operators; whether they produce limits in\n// displaystyle, and whether they are symbols and should grow in\n// displaystyle. These four groups cover the four possible choices.\nvar singleCharIntegrals = {\n    \"∫\": \"\\\\int\",\n    \"∬\": \"\\\\iint\",\n    \"∭\": \"\\\\iiint\",\n    \"∮\": \"\\\\oint\",\n    \"∯\": \"\\\\oiint\",\n    \"∰\": \"\\\\oiiint\"\n}; // No limits, not symbols\ndefineFunction({\n    type: \"op\",\n    names: [\n        \"\\\\arcsin\",\n        \"\\\\arccos\",\n        \"\\\\arctan\",\n        \"\\\\arctg\",\n        \"\\\\arcctg\",\n        \"\\\\arg\",\n        \"\\\\ch\",\n        \"\\\\cos\",\n        \"\\\\cosec\",\n        \"\\\\cosh\",\n        \"\\\\cot\",\n        \"\\\\cotg\",\n        \"\\\\coth\",\n        \"\\\\csc\",\n        \"\\\\ctg\",\n        \"\\\\cth\",\n        \"\\\\deg\",\n        \"\\\\dim\",\n        \"\\\\exp\",\n        \"\\\\hom\",\n        \"\\\\ker\",\n        \"\\\\lg\",\n        \"\\\\ln\",\n        \"\\\\log\",\n        \"\\\\sec\",\n        \"\\\\sin\",\n        \"\\\\sinh\",\n        \"\\\\sh\",\n        \"\\\\tan\",\n        \"\\\\tanh\",\n        \"\\\\tg\",\n        \"\\\\th\"\n    ],\n    props: {\n        numArgs: 0\n    },\n    handler (_ref3) {\n        var { parser, funcName } = _ref3;\n        return {\n            type: \"op\",\n            mode: parser.mode,\n            limits: false,\n            parentIsSupSub: false,\n            symbol: false,\n            name: funcName\n        };\n    },\n    htmlBuilder: htmlBuilder$2,\n    mathmlBuilder: mathmlBuilder$1\n}); // Limits, not symbols\ndefineFunction({\n    type: \"op\",\n    names: [\n        \"\\\\det\",\n        \"\\\\gcd\",\n        \"\\\\inf\",\n        \"\\\\lim\",\n        \"\\\\max\",\n        \"\\\\min\",\n        \"\\\\Pr\",\n        \"\\\\sup\"\n    ],\n    props: {\n        numArgs: 0\n    },\n    handler (_ref4) {\n        var { parser, funcName } = _ref4;\n        return {\n            type: \"op\",\n            mode: parser.mode,\n            limits: true,\n            parentIsSupSub: false,\n            symbol: false,\n            name: funcName\n        };\n    },\n    htmlBuilder: htmlBuilder$2,\n    mathmlBuilder: mathmlBuilder$1\n}); // No limits, symbols\ndefineFunction({\n    type: \"op\",\n    names: [\n        \"\\\\int\",\n        \"\\\\iint\",\n        \"\\\\iiint\",\n        \"\\\\oint\",\n        \"\\\\oiint\",\n        \"\\\\oiiint\",\n        \"∫\",\n        \"∬\",\n        \"∭\",\n        \"∮\",\n        \"∯\",\n        \"∰\"\n    ],\n    props: {\n        numArgs: 0\n    },\n    handler (_ref5) {\n        var { parser, funcName } = _ref5;\n        var fName = funcName;\n        if (fName.length === 1) {\n            fName = singleCharIntegrals[fName];\n        }\n        return {\n            type: \"op\",\n            mode: parser.mode,\n            limits: false,\n            parentIsSupSub: false,\n            symbol: true,\n            name: fName\n        };\n    },\n    htmlBuilder: htmlBuilder$2,\n    mathmlBuilder: mathmlBuilder$1\n});\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only\n// \"operatorname\", but also  \"supsub\" since \\operatorname* can\n// affect super/subscripting.\nvar htmlBuilder$1 = (grp, options)=>{\n    // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n    var supGroup;\n    var subGroup;\n    var hasLimits = false;\n    var group;\n    if (grp.type === \"supsub\") {\n        // If we have limits, supsub will pass us its group to handle. Pull\n        // out the superscript and subscript and set the group to the op in\n        // its base.\n        supGroup = grp.sup;\n        subGroup = grp.sub;\n        group = assertNodeType(grp.base, \"operatorname\");\n        hasLimits = true;\n    } else {\n        group = assertNodeType(grp, \"operatorname\");\n    }\n    var base;\n    if (group.body.length > 0) {\n        var body = group.body.map((child)=>{\n            // $FlowFixMe: Check if the node has a string `text` property.\n            var childText = child.text;\n            if (typeof childText === \"string\") {\n                return {\n                    type: \"textord\",\n                    mode: child.mode,\n                    text: childText\n                };\n            } else {\n                return child;\n            }\n        }); // Consolidate function names into symbol characters.\n        var expression = buildExpression$1(body, options.withFont(\"mathrm\"), true);\n        for(var i = 0; i < expression.length; i++){\n            var child = expression[i];\n            if (child instanceof SymbolNode) {\n                // Per amsopn package,\n                // change minus to hyphen and \\ast to asterisk\n                child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n            }\n        }\n        base = buildCommon.makeSpan([\n            \"mop\"\n        ], expression, options);\n    } else {\n        base = buildCommon.makeSpan([\n            \"mop\"\n        ], [], options);\n    }\n    if (hasLimits) {\n        return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0);\n    } else {\n        return base;\n    }\n};\nvar mathmlBuilder = (group, options)=>{\n    // The steps taken here are similar to the html version.\n    var expression = buildExpression(group.body, options.withFont(\"mathrm\")); // Is expression a string or has it something like a fraction?\n    var isAllString = true; // default\n    for(var i = 0; i < expression.length; i++){\n        var node = expression[i];\n        if (node instanceof mathMLTree.SpaceNode) ;\n        else if (node instanceof mathMLTree.MathNode) {\n            switch(node.type){\n                case \"mi\":\n                case \"mn\":\n                case \"ms\":\n                case \"mspace\":\n                case \"mtext\":\n                    break;\n                // Do nothing yet.\n                case \"mo\":\n                    {\n                        var child = node.children[0];\n                        if (node.children.length === 1 && child instanceof mathMLTree.TextNode) {\n                            child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n                        } else {\n                            isAllString = false;\n                        }\n                        break;\n                    }\n                default:\n                    isAllString = false;\n            }\n        } else {\n            isAllString = false;\n        }\n    }\n    if (isAllString) {\n        // Write a single TextNode instead of multiple nested tags.\n        var word = expression.map((node)=>node.toText()).join(\"\");\n        expression = [\n            new mathMLTree.TextNode(word)\n        ];\n    }\n    var identifier = new mathMLTree.MathNode(\"mi\", expression);\n    identifier.setAttribute(\"mathvariant\", \"normal\"); // \\u2061 is the same as ⁡\n    // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp\n    var operator = new mathMLTree.MathNode(\"mo\", [\n        makeText(\"\", \"text\")\n    ]);\n    if (group.parentIsSupSub) {\n        return new mathMLTree.MathNode(\"mrow\", [\n            identifier,\n            operator\n        ]);\n    } else {\n        return mathMLTree.newDocumentFragment([\n            identifier,\n            operator\n        ]);\n    }\n}; // \\operatorname\n// amsopn.dtx: \\mathop{#1\\kern\\z@\\operator@font#3}\\newmcodes@\ndefineFunction({\n    type: \"operatorname\",\n    names: [\n        \"\\\\operatorname@\",\n        \"\\\\operatornamewithlimits\"\n    ],\n    props: {\n        numArgs: 1\n    },\n    handler: (_ref, args)=>{\n        var { parser, funcName } = _ref;\n        var body = args[0];\n        return {\n            type: \"operatorname\",\n            mode: parser.mode,\n            body: ordargument(body),\n            alwaysHandleSupSub: funcName === \"\\\\operatornamewithlimits\",\n            limits: false,\n            parentIsSupSub: false\n        };\n    },\n    htmlBuilder: htmlBuilder$1,\n    mathmlBuilder\n});\ndefineMacro(\"\\\\operatorname\", \"\\\\@ifstar\\\\operatornamewithlimits\\\\operatorname@\");\ndefineFunctionBuilders({\n    type: \"ordgroup\",\n    htmlBuilder (group, options) {\n        if (group.semisimple) {\n            return buildCommon.makeFragment(buildExpression$1(group.body, options, false));\n        }\n        return buildCommon.makeSpan([\n            \"mord\"\n        ], buildExpression$1(group.body, options, true), options);\n    },\n    mathmlBuilder (group, options) {\n        return buildExpressionRow(group.body, options, true);\n    }\n});\ndefineFunction({\n    type: \"overline\",\n    names: [\n        \"\\\\overline\"\n    ],\n    props: {\n        numArgs: 1\n    },\n    handler (_ref, args) {\n        var { parser } = _ref;\n        var body = args[0];\n        return {\n            type: \"overline\",\n            mode: parser.mode,\n            body\n        };\n    },\n    htmlBuilder (group, options) {\n        // Overlines are handled in the TeXbook pg 443, Rule 9.\n        // Build the inner group in the cramped style.\n        var innerGroup = buildGroup$1(group.body, options.havingCrampedStyle()); // Create the line above the body\n        var line = buildCommon.makeLineSpan(\"overline-line\", options); // Generate the vlist, with the appropriate kerns\n        var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n        var vlist = buildCommon.makeVList({\n            positionType: \"firstBaseline\",\n            children: [\n                {\n                    type: \"elem\",\n                    elem: innerGroup\n                },\n                {\n                    type: \"kern\",\n                    size: 3 * defaultRuleThickness\n                },\n                {\n                    type: \"elem\",\n                    elem: line\n                },\n                {\n                    type: \"kern\",\n                    size: defaultRuleThickness\n                }\n            ]\n        }, options);\n        return buildCommon.makeSpan([\n            \"mord\",\n            \"overline\"\n        ], [\n            vlist\n        ], options);\n    },\n    mathmlBuilder (group, options) {\n        var operator = new mathMLTree.MathNode(\"mo\", [\n            new mathMLTree.TextNode(\"‾\")\n        ]);\n        operator.setAttribute(\"stretchy\", \"true\");\n        var node = new mathMLTree.MathNode(\"mover\", [\n            buildGroup(group.body, options),\n            operator\n        ]);\n        node.setAttribute(\"accent\", \"true\");\n        return node;\n    }\n});\ndefineFunction({\n    type: \"phantom\",\n    names: [\n        \"\\\\phantom\"\n    ],\n    props: {\n        numArgs: 1,\n        allowedInText: true\n    },\n    handler: (_ref, args)=>{\n        var { parser } = _ref;\n        var body = args[0];\n        return {\n            type: \"phantom\",\n            mode: parser.mode,\n            body: ordargument(body)\n        };\n    },\n    htmlBuilder: (group, options)=>{\n        var elements = buildExpression$1(group.body, options.withPhantom(), false); // \\phantom isn't supposed to affect the elements it contains.\n        // See \"color\" for more details.\n        return buildCommon.makeFragment(elements);\n    },\n    mathmlBuilder: (group, options)=>{\n        var inner = buildExpression(group.body, options);\n        return new mathMLTree.MathNode(\"mphantom\", inner);\n    }\n});\ndefineFunction({\n    type: \"hphantom\",\n    names: [\n        \"\\\\hphantom\"\n    ],\n    props: {\n        numArgs: 1,\n        allowedInText: true\n    },\n    handler: (_ref2, args)=>{\n        var { parser } = _ref2;\n        var body = args[0];\n        return {\n            type: \"hphantom\",\n            mode: parser.mode,\n            body\n        };\n    },\n    htmlBuilder: (group, options)=>{\n        var node = buildCommon.makeSpan([], [\n            buildGroup$1(group.body, options.withPhantom())\n        ]);\n        node.height = 0;\n        node.depth = 0;\n        if (node.children) {\n            for(var i = 0; i < node.children.length; i++){\n                node.children[i].height = 0;\n                node.children[i].depth = 0;\n            }\n        } // See smash for comment re: use of makeVList\n        node = buildCommon.makeVList({\n            positionType: \"firstBaseline\",\n            children: [\n                {\n                    type: \"elem\",\n                    elem: node\n                }\n            ]\n        }, options); // For spacing, TeX treats \\smash as a math group (same spacing as ord).\n        return buildCommon.makeSpan([\n            \"mord\"\n        ], [\n            node\n        ], options);\n    },\n    mathmlBuilder: (group, options)=>{\n        var inner = buildExpression(ordargument(group.body), options);\n        var phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n        var node = new mathMLTree.MathNode(\"mpadded\", [\n            phantom\n        ]);\n        node.setAttribute(\"height\", \"0px\");\n        node.setAttribute(\"depth\", \"0px\");\n        return node;\n    }\n});\ndefineFunction({\n    type: \"vphantom\",\n    names: [\n        \"\\\\vphantom\"\n    ],\n    props: {\n        numArgs: 1,\n        allowedInText: true\n    },\n    handler: (_ref3, args)=>{\n        var { parser } = _ref3;\n        var body = args[0];\n        return {\n            type: \"vphantom\",\n            mode: parser.mode,\n            body\n        };\n    },\n    htmlBuilder: (group, options)=>{\n        var inner = buildCommon.makeSpan([\n            \"inner\"\n        ], [\n            buildGroup$1(group.body, options.withPhantom())\n        ]);\n        var fix = buildCommon.makeSpan([\n            \"fix\"\n        ], []);\n        return buildCommon.makeSpan([\n            \"mord\",\n            \"rlap\"\n        ], [\n            inner,\n            fix\n        ], options);\n    },\n    mathmlBuilder: (group, options)=>{\n        var inner = buildExpression(ordargument(group.body), options);\n        var phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n        var node = new mathMLTree.MathNode(\"mpadded\", [\n            phantom\n        ]);\n        node.setAttribute(\"width\", \"0px\");\n        return node;\n    }\n});\ndefineFunction({\n    type: \"raisebox\",\n    names: [\n        \"\\\\raisebox\"\n    ],\n    props: {\n        numArgs: 2,\n        argTypes: [\n            \"size\",\n            \"hbox\"\n        ],\n        allowedInText: true\n    },\n    handler (_ref, args) {\n        var { parser } = _ref;\n        var amount = assertNodeType(args[0], \"size\").value;\n        var body = args[1];\n        return {\n            type: \"raisebox\",\n            mode: parser.mode,\n            dy: amount,\n            body\n        };\n    },\n    htmlBuilder (group, options) {\n        var body = buildGroup$1(group.body, options);\n        var dy = calculateSize(group.dy, options);\n        return buildCommon.makeVList({\n            positionType: \"shift\",\n            positionData: -dy,\n            children: [\n                {\n                    type: \"elem\",\n                    elem: body\n                }\n            ]\n        }, options);\n    },\n    mathmlBuilder (group, options) {\n        var node = new mathMLTree.MathNode(\"mpadded\", [\n            buildGroup(group.body, options)\n        ]);\n        var dy = group.dy.number + group.dy.unit;\n        node.setAttribute(\"voffset\", dy);\n        return node;\n    }\n});\ndefineFunction({\n    type: \"internal\",\n    names: [\n        \"\\\\relax\"\n    ],\n    props: {\n        numArgs: 0,\n        allowedInText: true\n    },\n    handler (_ref) {\n        var { parser } = _ref;\n        return {\n            type: \"internal\",\n            mode: parser.mode\n        };\n    }\n});\ndefineFunction({\n    type: \"rule\",\n    names: [\n        \"\\\\rule\"\n    ],\n    props: {\n        numArgs: 2,\n        numOptionalArgs: 1,\n        argTypes: [\n            \"size\",\n            \"size\",\n            \"size\"\n        ]\n    },\n    handler (_ref, args, optArgs) {\n        var { parser } = _ref;\n        var shift = optArgs[0];\n        var width = assertNodeType(args[0], \"size\");\n        var height = assertNodeType(args[1], \"size\");\n        return {\n            type: \"rule\",\n            mode: parser.mode,\n            shift: shift && assertNodeType(shift, \"size\").value,\n            width: width.value,\n            height: height.value\n        };\n    },\n    htmlBuilder (group, options) {\n        // Make an empty span for the rule\n        var rule = buildCommon.makeSpan([\n            \"mord\",\n            \"rule\"\n        ], [], options); // Calculate the shift, width, and height of the rule, and account for units\n        var width = calculateSize(group.width, options);\n        var height = calculateSize(group.height, options);\n        var shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size\n        rule.style.borderRightWidth = makeEm(width);\n        rule.style.borderTopWidth = makeEm(height);\n        rule.style.bottom = makeEm(shift); // Record the height and width\n        rule.width = width;\n        rule.height = height + shift;\n        rule.depth = -shift; // Font size is the number large enough that the browser will\n        // reserve at least `absHeight` space above the baseline.\n        // The 1.125 factor was empirically determined\n        rule.maxFontSize = height * 1.125 * options.sizeMultiplier;\n        return rule;\n    },\n    mathmlBuilder (group, options) {\n        var width = calculateSize(group.width, options);\n        var height = calculateSize(group.height, options);\n        var shift = group.shift ? calculateSize(group.shift, options) : 0;\n        var color = options.color && options.getColor() || \"black\";\n        var rule = new mathMLTree.MathNode(\"mspace\");\n        rule.setAttribute(\"mathbackground\", color);\n        rule.setAttribute(\"width\", makeEm(width));\n        rule.setAttribute(\"height\", makeEm(height));\n        var wrapper = new mathMLTree.MathNode(\"mpadded\", [\n            rule\n        ]);\n        if (shift >= 0) {\n            wrapper.setAttribute(\"height\", makeEm(shift));\n        } else {\n            wrapper.setAttribute(\"height\", makeEm(shift));\n            wrapper.setAttribute(\"depth\", makeEm(-shift));\n        }\n        wrapper.setAttribute(\"voffset\", makeEm(shift));\n        return wrapper;\n    }\n});\nfunction sizingGroup(value, options, baseOptions) {\n    var inner = buildExpression$1(value, options, false);\n    var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize\n    // manually. Handle nested size changes.\n    for(var i = 0; i < inner.length; i++){\n        var pos = inner[i].classes.indexOf(\"sizing\");\n        if (pos < 0) {\n            Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));\n        } else if (inner[i].classes[pos + 1] === \"reset-size\" + options.size) {\n            // This is a nested size change: e.g., inner[i] is the \"b\" in\n            // `\\Huge a \\small b`. Override the old size (the `reset-` class)\n            // but not the new size.\n            inner[i].classes[pos + 1] = \"reset-size\" + baseOptions.size;\n        }\n        inner[i].height *= multiplier;\n        inner[i].depth *= multiplier;\n    }\n    return buildCommon.makeFragment(inner);\n}\nvar sizeFuncs = [\n    \"\\\\tiny\",\n    \"\\\\sixptsize\",\n    \"\\\\scriptsize\",\n    \"\\\\footnotesize\",\n    \"\\\\small\",\n    \"\\\\normalsize\",\n    \"\\\\large\",\n    \"\\\\Large\",\n    \"\\\\LARGE\",\n    \"\\\\huge\",\n    \"\\\\Huge\"\n];\nvar htmlBuilder = (group, options)=>{\n    // Handle sizing operators like \\Huge. Real TeX doesn't actually allow\n    // these functions inside of math expressions, so we do some special\n    // handling.\n    var newOptions = options.havingSize(group.size);\n    return sizingGroup(group.body, newOptions, options);\n};\ndefineFunction({\n    type: \"sizing\",\n    names: sizeFuncs,\n    props: {\n        numArgs: 0,\n        allowedInText: true\n    },\n    handler: (_ref, args)=>{\n        var { breakOnTokenText, funcName, parser } = _ref;\n        var body = parser.parseExpression(false, breakOnTokenText);\n        return {\n            type: \"sizing\",\n            mode: parser.mode,\n            // Figure out what size to use based on the list of functions above\n            size: sizeFuncs.indexOf(funcName) + 1,\n            body\n        };\n    },\n    htmlBuilder,\n    mathmlBuilder: (group, options)=>{\n        var newOptions = options.havingSize(group.size);\n        var inner = buildExpression(group.body, newOptions);\n        var node = new mathMLTree.MathNode(\"mstyle\", inner); // TODO(emily): This doesn't produce the correct size for nested size\n        // changes, because we don't keep state of what style we're currently\n        // in, so we can't reset the size to normal before changing it.  Now\n        // that we're passing an options parameter we should be able to fix\n        // this.\n        node.setAttribute(\"mathsize\", makeEm(newOptions.sizeMultiplier));\n        return node;\n    }\n});\n// smash, with optional [tb], as in AMS\ndefineFunction({\n    type: \"smash\",\n    names: [\n        \"\\\\smash\"\n    ],\n    props: {\n        numArgs: 1,\n        numOptionalArgs: 1,\n        allowedInText: true\n    },\n    handler: (_ref, args, optArgs)=>{\n        var { parser } = _ref;\n        var smashHeight = false;\n        var smashDepth = false;\n        var tbArg = optArgs[0] && assertNodeType(optArgs[0], \"ordgroup\");\n        if (tbArg) {\n            // Optional [tb] argument is engaged.\n            // ref: amsmath: \\renewcommand{\\smash}[1][tb]{%\n            //               def\\mb@t{\\ht}\\def\\mb@b{\\dp}\\def\\mb@tb{\\ht\\z@\\z@\\dp}%\n            var letter = \"\";\n            for(var i = 0; i < tbArg.body.length; ++i){\n                var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property.\n                letter = node.text;\n                if (letter === \"t\") {\n                    smashHeight = true;\n                } else if (letter === \"b\") {\n                    smashDepth = true;\n                } else {\n                    smashHeight = false;\n                    smashDepth = false;\n                    break;\n                }\n            }\n        } else {\n            smashHeight = true;\n            smashDepth = true;\n        }\n        var body = args[0];\n        return {\n            type: \"smash\",\n            mode: parser.mode,\n            body,\n            smashHeight,\n            smashDepth\n        };\n    },\n    htmlBuilder: (group, options)=>{\n        var node = buildCommon.makeSpan([], [\n            buildGroup$1(group.body, options)\n        ]);\n        if (!group.smashHeight && !group.smashDepth) {\n            return node;\n        }\n        if (group.smashHeight) {\n            node.height = 0; // In order to influence makeVList, we have to reset the children.\n            if (node.children) {\n                for(var i = 0; i < node.children.length; i++){\n                    node.children[i].height = 0;\n                }\n            }\n        }\n        if (group.smashDepth) {\n            node.depth = 0;\n            if (node.children) {\n                for(var _i = 0; _i < node.children.length; _i++){\n                    node.children[_i].depth = 0;\n                }\n            }\n        } // At this point, we've reset the TeX-like height and depth values.\n        // But the span still has an HTML line height.\n        // makeVList applies \"display: table-cell\", which prevents the browser\n        // from acting on that line height. So we'll call makeVList now.\n        var smashedNode = buildCommon.makeVList({\n            positionType: \"firstBaseline\",\n            children: [\n                {\n                    type: \"elem\",\n                    elem: node\n                }\n            ]\n        }, options); // For spacing, TeX treats \\hphantom as a math group (same spacing as ord).\n        return buildCommon.makeSpan([\n            \"mord\"\n        ], [\n            smashedNode\n        ], options);\n    },\n    mathmlBuilder: (group, options)=>{\n        var node = new mathMLTree.MathNode(\"mpadded\", [\n            buildGroup(group.body, options)\n        ]);\n        if (group.smashHeight) {\n            node.setAttribute(\"height\", \"0px\");\n        }\n        if (group.smashDepth) {\n            node.setAttribute(\"depth\", \"0px\");\n        }\n        return node;\n    }\n});\ndefineFunction({\n    type: \"sqrt\",\n    names: [\n        \"\\\\sqrt\"\n    ],\n    props: {\n        numArgs: 1,\n        numOptionalArgs: 1\n    },\n    handler (_ref, args, optArgs) {\n        var { parser } = _ref;\n        var index = optArgs[0];\n        var body = args[0];\n        return {\n            type: \"sqrt\",\n            mode: parser.mode,\n            body,\n            index\n        };\n    },\n    htmlBuilder (group, options) {\n        // Square roots are handled in the TeXbook pg. 443, Rule 11.\n        // First, we do the same steps as in overline to build the inner group\n        // and line\n        var inner = buildGroup$1(group.body, options.havingCrampedStyle());\n        if (inner.height === 0) {\n            // Render a small surd.\n            inner.height = options.fontMetrics().xHeight;\n        } // Some groups can return document fragments.  Handle those by wrapping\n        // them in a span.\n        inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \\surd delimiter\n        var metrics = options.fontMetrics();\n        var theta = metrics.defaultRuleThickness;\n        var phi = theta;\n        if (options.style.id < Style$1.TEXT.id) {\n            phi = options.fontMetrics().xHeight;\n        } // Calculate the clearance between the body and line\n        var lineClearance = theta + phi / 4;\n        var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size\n        var { span: img, ruleWidth, advanceWidth } = delimiter.sqrtImage(minDelimiterHeight, options);\n        var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size\n        if (delimDepth > inner.height + inner.depth + lineClearance) {\n            lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;\n        } // Shift the sqrt image\n        var imgShift = img.height - inner.height - lineClearance - ruleWidth;\n        inner.style.paddingLeft = makeEm(advanceWidth); // Overlay the image and the argument.\n        var body = buildCommon.makeVList({\n            positionType: \"firstBaseline\",\n            children: [\n                {\n                    type: \"elem\",\n                    elem: inner,\n                    wrapperClasses: [\n                        \"svg-align\"\n                    ]\n                },\n                {\n                    type: \"kern\",\n                    size: -(inner.height + imgShift)\n                },\n                {\n                    type: \"elem\",\n                    elem: img\n                },\n                {\n                    type: \"kern\",\n                    size: ruleWidth\n                }\n            ]\n        }, options);\n        if (!group.index) {\n            return buildCommon.makeSpan([\n                \"mord\",\n                \"sqrt\"\n            ], [\n                body\n            ], options);\n        } else {\n            // Handle the optional root index\n            // The index is always in scriptscript style\n            var newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT);\n            var rootm = buildGroup$1(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX\n            // source, in the definition of `\\r@@t`.\n            var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly\n            var rootVList = buildCommon.makeVList({\n                positionType: \"shift\",\n                positionData: -toShift,\n                children: [\n                    {\n                        type: \"elem\",\n                        elem: rootm\n                    }\n                ]\n            }, options); // Add a class surrounding it so we can add on the appropriate\n            // kerning\n            var rootVListWrap = buildCommon.makeSpan([\n                \"root\"\n            ], [\n                rootVList\n            ]);\n            return buildCommon.makeSpan([\n                \"mord\",\n                \"sqrt\"\n            ], [\n                rootVListWrap,\n                body\n            ], options);\n        }\n    },\n    mathmlBuilder (group, options) {\n        var { body, index } = group;\n        return index ? new mathMLTree.MathNode(\"mroot\", [\n            buildGroup(body, options),\n            buildGroup(index, options)\n        ]) : new mathMLTree.MathNode(\"msqrt\", [\n            buildGroup(body, options)\n        ]);\n    }\n});\nvar styleMap = {\n    \"display\": Style$1.DISPLAY,\n    \"text\": Style$1.TEXT,\n    \"script\": Style$1.SCRIPT,\n    \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\ndefineFunction({\n    type: \"styling\",\n    names: [\n        \"\\\\displaystyle\",\n        \"\\\\textstyle\",\n        \"\\\\scriptstyle\",\n        \"\\\\scriptscriptstyle\"\n    ],\n    props: {\n        numArgs: 0,\n        allowedInText: true,\n        primitive: true\n    },\n    handler (_ref, args) {\n        var { breakOnTokenText, funcName, parser } = _ref;\n        // parse out the implicit body\n        var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g.\n        // here and in buildHTML and de-dupe the enumeration of all the styles).\n        // $FlowFixMe: The names above exactly match the styles.\n        var style = funcName.slice(1, funcName.length - 5);\n        return {\n            type: \"styling\",\n            mode: parser.mode,\n            // Figure out what style to use by pulling out the style from\n            // the function name\n            style,\n            body\n        };\n    },\n    htmlBuilder (group, options) {\n        // Style changes are handled in the TeXbook on pg. 442, Rule 3.\n        var newStyle = styleMap[group.style];\n        var newOptions = options.havingStyle(newStyle).withFont(\"\");\n        return sizingGroup(group.body, newOptions, options);\n    },\n    mathmlBuilder (group, options) {\n        // Figure out what style we're changing to.\n        var newStyle = styleMap[group.style];\n        var newOptions = options.havingStyle(newStyle);\n        var inner = buildExpression(group.body, newOptions);\n        var node = new mathMLTree.MathNode(\"mstyle\", inner);\n        var styleAttributes = {\n            \"display\": [\n                \"0\",\n                \"true\"\n            ],\n            \"text\": [\n                \"0\",\n                \"false\"\n            ],\n            \"script\": [\n                \"1\",\n                \"false\"\n            ],\n            \"scriptscript\": [\n                \"2\",\n                \"false\"\n            ]\n        };\n        var attr = styleAttributes[group.style];\n        node.setAttribute(\"scriptlevel\", attr[0]);\n        node.setAttribute(\"displaystyle\", attr[1]);\n        return node;\n    }\n});\n/**\n * Sometimes, groups perform special rules when they have superscripts or\n * subscripts attached to them. This function lets the `supsub` group know that\n * Sometimes, groups perform special rules when they have superscripts or\n * its inner element should handle the superscripts and subscripts instead of\n * handling them itself.\n */ var htmlBuilderDelegate = function htmlBuilderDelegate(group, options) {\n    var base = group.base;\n    if (!base) {\n        return null;\n    } else if (base.type === \"op\") {\n        // Operators handle supsubs differently when they have limits\n        // (e.g. `\\displaystyle\\sum_2^3`)\n        var delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub);\n        return delegate ? htmlBuilder$2 : null;\n    } else if (base.type === \"operatorname\") {\n        var _delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits);\n        return _delegate ? htmlBuilder$1 : null;\n    } else if (base.type === \"accent\") {\n        return utils.isCharacterBox(base.base) ? htmlBuilder$a : null;\n    } else if (base.type === \"horizBrace\") {\n        var isSup = !group.sub;\n        return isSup === base.isOver ? htmlBuilder$3 : null;\n    } else {\n        return null;\n    }\n}; // Super scripts and subscripts, whose precise placement can depend on other\n// functions that precede them.\ndefineFunctionBuilders({\n    type: \"supsub\",\n    htmlBuilder (group, options) {\n        // Superscript and subscripts are handled in the TeXbook on page\n        // 445-446, rules 18(a-f).\n        // Here is where we defer to the inner group if it should handle\n        // superscripts and subscripts itself.\n        var builderDelegate = htmlBuilderDelegate(group, options);\n        if (builderDelegate) {\n            return builderDelegate(group, options);\n        }\n        var { base: valueBase, sup: valueSup, sub: valueSub } = group;\n        var base = buildGroup$1(valueBase, options);\n        var supm;\n        var subm;\n        var metrics = options.fontMetrics(); // Rule 18a\n        var supShift = 0;\n        var subShift = 0;\n        var isCharacterBox = valueBase && utils.isCharacterBox(valueBase);\n        if (valueSup) {\n            var newOptions = options.havingStyle(options.style.sup());\n            supm = buildGroup$1(valueSup, newOptions, options);\n            if (!isCharacterBox) {\n                supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier;\n            }\n        }\n        if (valueSub) {\n            var _newOptions = options.havingStyle(options.style.sub());\n            subm = buildGroup$1(valueSub, _newOptions, options);\n            if (!isCharacterBox) {\n                subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier;\n            }\n        } // Rule 18c\n        var minSupShift;\n        if (options.style === Style$1.DISPLAY) {\n            minSupShift = metrics.sup1;\n        } else if (options.style.cramped) {\n            minSupShift = metrics.sup3;\n        } else {\n            minSupShift = metrics.sup2;\n        } // scriptspace is a font-size-independent size, so scale it\n        // appropriately for use as the marginRight.\n        var multiplier = options.sizeMultiplier;\n        var marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier);\n        var marginLeft = null;\n        if (subm) {\n            // Subscripts shouldn't be shifted by the base's italic correction.\n            // Account for that by shifting the subscript back the appropriate\n            // amount. Note we only do this when the base is a single symbol.\n            var isOiint = group.base && group.base.type === \"op\" && group.base.name && (group.base.name === \"\\\\oiint\" || group.base.name === \"\\\\oiiint\");\n            if (base instanceof SymbolNode || isOiint) {\n                // $FlowFixMe\n                marginLeft = makeEm(-base.italic);\n            }\n        }\n        var supsub;\n        if (supm && subm) {\n            supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n            subShift = Math.max(subShift, metrics.sub2);\n            var ruleWidth = metrics.defaultRuleThickness; // Rule 18e\n            var maxWidth = 4 * ruleWidth;\n            if (supShift - supm.depth - (subm.height - subShift) < maxWidth) {\n                subShift = maxWidth - (supShift - supm.depth) + subm.height;\n                var psi = 0.8 * metrics.xHeight - (supShift - supm.depth);\n                if (psi > 0) {\n                    supShift += psi;\n                    subShift -= psi;\n                }\n            }\n            var vlistElem = [\n                {\n                    type: \"elem\",\n                    elem: subm,\n                    shift: subShift,\n                    marginRight,\n                    marginLeft\n                },\n                {\n                    type: \"elem\",\n                    elem: supm,\n                    shift: -supShift,\n                    marginRight\n                }\n            ];\n            supsub = buildCommon.makeVList({\n                positionType: \"individualShift\",\n                children: vlistElem\n            }, options);\n        } else if (subm) {\n            // Rule 18b\n            subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);\n            var _vlistElem = [\n                {\n                    type: \"elem\",\n                    elem: subm,\n                    marginLeft,\n                    marginRight\n                }\n            ];\n            supsub = buildCommon.makeVList({\n                positionType: \"shift\",\n                positionData: subShift,\n                children: _vlistElem\n            }, options);\n        } else if (supm) {\n            // Rule 18c, d\n            supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n            supsub = buildCommon.makeVList({\n                positionType: \"shift\",\n                positionData: -supShift,\n                children: [\n                    {\n                        type: \"elem\",\n                        elem: supm,\n                        marginRight\n                    }\n                ]\n            }, options);\n        } else {\n            throw new Error(\"supsub must have either sup or sub.\");\n        } // Wrap the supsub vlist in a span.msupsub to reset text-align.\n        var mclass = getTypeOfDomTree(base, \"right\") || \"mord\";\n        return buildCommon.makeSpan([\n            mclass\n        ], [\n            base,\n            buildCommon.makeSpan([\n                \"msupsub\"\n            ], [\n                supsub\n            ])\n        ], options);\n    },\n    mathmlBuilder (group, options) {\n        // Is the inner group a relevant horizonal brace?\n        var isBrace = false;\n        var isOver;\n        var isSup;\n        if (group.base && group.base.type === \"horizBrace\") {\n            isSup = !!group.sup;\n            if (isSup === group.base.isOver) {\n                isBrace = true;\n                isOver = group.base.isOver;\n            }\n        }\n        if (group.base && (group.base.type === \"op\" || group.base.type === \"operatorname\")) {\n            group.base.parentIsSupSub = true;\n        }\n        var children = [\n            buildGroup(group.base, options)\n        ];\n        if (group.sub) {\n            children.push(buildGroup(group.sub, options));\n        }\n        if (group.sup) {\n            children.push(buildGroup(group.sup, options));\n        }\n        var nodeType;\n        if (isBrace) {\n            nodeType = isOver ? \"mover\" : \"munder\";\n        } else if (!group.sub) {\n            var base = group.base;\n            if (base && base.type === \"op\" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) {\n                nodeType = \"mover\";\n            } else if (base && base.type === \"operatorname\" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) {\n                nodeType = \"mover\";\n            } else {\n                nodeType = \"msup\";\n            }\n        } else if (!group.sup) {\n            var _base = group.base;\n            if (_base && _base.type === \"op\" && _base.limits && (options.style === Style$1.DISPLAY || _base.alwaysHandleSupSub)) {\n                nodeType = \"munder\";\n            } else if (_base && _base.type === \"operatorname\" && _base.alwaysHandleSupSub && (_base.limits || options.style === Style$1.DISPLAY)) {\n                nodeType = \"munder\";\n            } else {\n                nodeType = \"msub\";\n            }\n        } else {\n            var _base2 = group.base;\n            if (_base2 && _base2.type === \"op\" && _base2.limits && options.style === Style$1.DISPLAY) {\n                nodeType = \"munderover\";\n            } else if (_base2 && _base2.type === \"operatorname\" && _base2.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || _base2.limits)) {\n                nodeType = \"munderover\";\n            } else {\n                nodeType = \"msubsup\";\n            }\n        }\n        return new mathMLTree.MathNode(nodeType, children);\n    }\n});\ndefineFunctionBuilders({\n    type: \"atom\",\n    htmlBuilder (group, options) {\n        return buildCommon.mathsym(group.text, group.mode, options, [\n            \"m\" + group.family\n        ]);\n    },\n    mathmlBuilder (group, options) {\n        var node = new mathMLTree.MathNode(\"mo\", [\n            makeText(group.text, group.mode)\n        ]);\n        if (group.family === \"bin\") {\n            var variant = getVariant(group, options);\n            if (variant === \"bold-italic\") {\n                node.setAttribute(\"mathvariant\", variant);\n            }\n        } else if (group.family === \"punct\") {\n            node.setAttribute(\"separator\", \"true\");\n        } else if (group.family === \"open\" || group.family === \"close\") {\n            // Delims built here should not stretch vertically.\n            // See delimsizing.js for stretchy delims.\n            node.setAttribute(\"stretchy\", \"false\");\n        }\n        return node;\n    }\n});\n// \"mathord\" and \"textord\" ParseNodes created in Parser.js from symbol Groups in\n// src/symbols.js.\nvar defaultVariant = {\n    \"mi\": \"italic\",\n    \"mn\": \"normal\",\n    \"mtext\": \"normal\"\n};\ndefineFunctionBuilders({\n    type: \"mathord\",\n    htmlBuilder (group, options) {\n        return buildCommon.makeOrd(group, options, \"mathord\");\n    },\n    mathmlBuilder (group, options) {\n        var node = new mathMLTree.MathNode(\"mi\", [\n            makeText(group.text, group.mode, options)\n        ]);\n        var variant = getVariant(group, options) || \"italic\";\n        if (variant !== defaultVariant[node.type]) {\n            node.setAttribute(\"mathvariant\", variant);\n        }\n        return node;\n    }\n});\ndefineFunctionBuilders({\n    type: \"textord\",\n    htmlBuilder (group, options) {\n        return buildCommon.makeOrd(group, options, \"textord\");\n    },\n    mathmlBuilder (group, options) {\n        var text = makeText(group.text, group.mode, options);\n        var variant = getVariant(group, options) || \"normal\";\n        var node;\n        if (group.mode === \"text\") {\n            node = new mathMLTree.MathNode(\"mtext\", [\n                text\n            ]);\n        } else if (/[0-9]/.test(group.text)) {\n            node = new mathMLTree.MathNode(\"mn\", [\n                text\n            ]);\n        } else if (group.text === \"\\\\prime\") {\n            node = new mathMLTree.MathNode(\"mo\", [\n                text\n            ]);\n        } else {\n            node = new mathMLTree.MathNode(\"mi\", [\n                text\n            ]);\n        }\n        if (variant !== defaultVariant[node.type]) {\n            node.setAttribute(\"mathvariant\", variant);\n        }\n        return node;\n    }\n});\nvar cssSpace = {\n    \"\\\\nobreak\": \"nobreak\",\n    \"\\\\allowbreak\": \"allowbreak\"\n}; // A lookup table to determine whether a spacing function/symbol should be\n// treated like a regular space character.  If a symbol or command is a key\n// in this table, then it should be a regular space character.  Furthermore,\n// the associated value may have a `className` specifying an extra CSS class\n// to add to the created `span`.\nvar regularSpace = {\n    \" \": {},\n    \"\\\\ \": {},\n    \"~\": {\n        className: \"nobreak\"\n    },\n    \"\\\\space\": {},\n    \"\\\\nobreakspace\": {\n        className: \"nobreak\"\n    }\n}; // ParseNode<\"spacing\"> created in Parser.js from the \"spacing\" symbol Groups in\n// src/symbols.js.\ndefineFunctionBuilders({\n    type: \"spacing\",\n    htmlBuilder (group, options) {\n        if (regularSpace.hasOwnProperty(group.text)) {\n            var className = regularSpace[group.text].className || \"\"; // Spaces are generated by adding an actual space. Each of these\n            // things has an entry in the symbols table, so these will be turned\n            // into appropriate outputs.\n            if (group.mode === \"text\") {\n                var ord = buildCommon.makeOrd(group, options, \"textord\");\n                ord.classes.push(className);\n                return ord;\n            } else {\n                return buildCommon.makeSpan([\n                    \"mspace\",\n                    className\n                ], [\n                    buildCommon.mathsym(group.text, group.mode, options)\n                ], options);\n            }\n        } else if (cssSpace.hasOwnProperty(group.text)) {\n            // Spaces based on just a CSS class.\n            return buildCommon.makeSpan([\n                \"mspace\",\n                cssSpace[group.text]\n            ], [], options);\n        } else {\n            throw new ParseError('Unknown type of space \"' + group.text + '\"');\n        }\n    },\n    mathmlBuilder (group, options) {\n        var node;\n        if (regularSpace.hasOwnProperty(group.text)) {\n            node = new mathMLTree.MathNode(\"mtext\", [\n                new mathMLTree.TextNode(\"\\xa0\")\n            ]);\n        } else if (cssSpace.hasOwnProperty(group.text)) {\n            // CSS-based MathML spaces (\\nobreak, \\allowbreak) are ignored\n            return new mathMLTree.MathNode(\"mspace\");\n        } else {\n            throw new ParseError('Unknown type of space \"' + group.text + '\"');\n        }\n        return node;\n    }\n});\nvar pad = ()=>{\n    var padNode = new mathMLTree.MathNode(\"mtd\", []);\n    padNode.setAttribute(\"width\", \"50%\");\n    return padNode;\n};\ndefineFunctionBuilders({\n    type: \"tag\",\n    mathmlBuilder (group, options) {\n        var table = new mathMLTree.MathNode(\"mtable\", [\n            new mathMLTree.MathNode(\"mtr\", [\n                pad(),\n                new mathMLTree.MathNode(\"mtd\", [\n                    buildExpressionRow(group.body, options)\n                ]),\n                pad(),\n                new mathMLTree.MathNode(\"mtd\", [\n                    buildExpressionRow(group.tag, options)\n                ])\n            ])\n        ]);\n        table.setAttribute(\"width\", \"100%\");\n        return table; // TODO: Left-aligned tags.\n    // Currently, the group and options passed here do not contain\n    // enough info to set tag alignment. `leqno` is in Settings but it is\n    // not passed to Options. On the HTML side, leqno is\n    // set by a CSS class applied in buildTree.js. That would have worked\n    // in MathML if browsers supported <mlabeledtr>. Since they don't, we\n    // need to rewrite the way this function is called.\n    }\n});\nvar textFontFamilies = {\n    \"\\\\text\": undefined,\n    \"\\\\textrm\": \"textrm\",\n    \"\\\\textsf\": \"textsf\",\n    \"\\\\texttt\": \"texttt\",\n    \"\\\\textnormal\": \"textrm\"\n};\nvar textFontWeights = {\n    \"\\\\textbf\": \"textbf\",\n    \"\\\\textmd\": \"textmd\"\n};\nvar textFontShapes = {\n    \"\\\\textit\": \"textit\",\n    \"\\\\textup\": \"textup\"\n};\nvar optionsWithFont = (group, options)=>{\n    var font = group.font; // Checks if the argument is a font family or a font style.\n    if (!font) {\n        return options;\n    } else if (textFontFamilies[font]) {\n        return options.withTextFontFamily(textFontFamilies[font]);\n    } else if (textFontWeights[font]) {\n        return options.withTextFontWeight(textFontWeights[font]);\n    } else {\n        return options.withTextFontShape(textFontShapes[font]);\n    }\n};\ndefineFunction({\n    type: \"text\",\n    names: [\n        \"\\\\text\",\n        \"\\\\textrm\",\n        \"\\\\textsf\",\n        \"\\\\texttt\",\n        \"\\\\textnormal\",\n        \"\\\\textbf\",\n        \"\\\\textmd\",\n        \"\\\\textit\",\n        \"\\\\textup\"\n    ],\n    props: {\n        numArgs: 1,\n        argTypes: [\n            \"text\"\n        ],\n        allowedInArgument: true,\n        allowedInText: true\n    },\n    handler (_ref, args) {\n        var { parser, funcName } = _ref;\n        var body = args[0];\n        return {\n            type: \"text\",\n            mode: parser.mode,\n            body: ordargument(body),\n            font: funcName\n        };\n    },\n    htmlBuilder (group, options) {\n        var newOptions = optionsWithFont(group, options);\n        var inner = buildExpression$1(group.body, newOptions, true);\n        return buildCommon.makeSpan([\n            \"mord\",\n            \"text\"\n        ], inner, newOptions);\n    },\n    mathmlBuilder (group, options) {\n        var newOptions = optionsWithFont(group, options);\n        return buildExpressionRow(group.body, newOptions);\n    }\n});\ndefineFunction({\n    type: \"underline\",\n    names: [\n        \"\\\\underline\"\n    ],\n    props: {\n        numArgs: 1,\n        allowedInText: true\n    },\n    handler (_ref, args) {\n        var { parser } = _ref;\n        return {\n            type: \"underline\",\n            mode: parser.mode,\n            body: args[0]\n        };\n    },\n    htmlBuilder (group, options) {\n        // Underlines are handled in the TeXbook pg 443, Rule 10.\n        // Build the inner group.\n        var innerGroup = buildGroup$1(group.body, options); // Create the line to go below the body\n        var line = buildCommon.makeLineSpan(\"underline-line\", options); // Generate the vlist, with the appropriate kerns\n        var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n        var vlist = buildCommon.makeVList({\n            positionType: \"top\",\n            positionData: innerGroup.height,\n            children: [\n                {\n                    type: \"kern\",\n                    size: defaultRuleThickness\n                },\n                {\n                    type: \"elem\",\n                    elem: line\n                },\n                {\n                    type: \"kern\",\n                    size: 3 * defaultRuleThickness\n                },\n                {\n                    type: \"elem\",\n                    elem: innerGroup\n                }\n            ]\n        }, options);\n        return buildCommon.makeSpan([\n            \"mord\",\n            \"underline\"\n        ], [\n            vlist\n        ], options);\n    },\n    mathmlBuilder (group, options) {\n        var operator = new mathMLTree.MathNode(\"mo\", [\n            new mathMLTree.TextNode(\"‾\")\n        ]);\n        operator.setAttribute(\"stretchy\", \"true\");\n        var node = new mathMLTree.MathNode(\"munder\", [\n            buildGroup(group.body, options),\n            operator\n        ]);\n        node.setAttribute(\"accentunder\", \"true\");\n        return node;\n    }\n});\ndefineFunction({\n    type: \"vcenter\",\n    names: [\n        \"\\\\vcenter\"\n    ],\n    props: {\n        numArgs: 1,\n        argTypes: [\n            \"original\"\n        ],\n        // In LaTeX, \\vcenter can act only on a box.\n        allowedInText: false\n    },\n    handler (_ref, args) {\n        var { parser } = _ref;\n        return {\n            type: \"vcenter\",\n            mode: parser.mode,\n            body: args[0]\n        };\n    },\n    htmlBuilder (group, options) {\n        var body = buildGroup$1(group.body, options);\n        var axisHeight = options.fontMetrics().axisHeight;\n        var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight));\n        return buildCommon.makeVList({\n            positionType: \"shift\",\n            positionData: dy,\n            children: [\n                {\n                    type: \"elem\",\n                    elem: body\n                }\n            ]\n        }, options);\n    },\n    mathmlBuilder (group, options) {\n        // There is no way to do this in MathML.\n        // Write a class as a breadcrumb in case some post-processor wants\n        // to perform a vcenter adjustment.\n        return new mathMLTree.MathNode(\"mpadded\", [\n            buildGroup(group.body, options)\n        ], [\n            \"vcenter\"\n        ]);\n    }\n});\ndefineFunction({\n    type: \"verb\",\n    names: [\n        \"\\\\verb\"\n    ],\n    props: {\n        numArgs: 0,\n        allowedInText: true\n    },\n    handler (context, args, optArgs) {\n        // \\verb and \\verb* are dealt with directly in Parser.js.\n        // If we end up here, it's because of a failure to match the two delimiters\n        // in the regex in Lexer.js.  LaTeX raises the following error when \\verb is\n        // terminated by end of line (or file).\n        throw new ParseError(\"\\\\verb ended by end of line instead of matching delimiter\");\n    },\n    htmlBuilder (group, options) {\n        var text = makeVerb(group);\n        var body = []; // \\verb enters text mode and therefore is sized like \\textstyle\n        var newOptions = options.havingStyle(options.style.text());\n        for(var i = 0; i < text.length; i++){\n            var c = text[i];\n            if (c === \"~\") {\n                c = \"\\\\textasciitilde\";\n            }\n            body.push(buildCommon.makeSymbol(c, \"Typewriter-Regular\", group.mode, newOptions, [\n                \"mord\",\n                \"texttt\"\n            ]));\n        }\n        return buildCommon.makeSpan([\n            \"mord\",\n            \"text\"\n        ].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions);\n    },\n    mathmlBuilder (group, options) {\n        var text = new mathMLTree.TextNode(makeVerb(group));\n        var node = new mathMLTree.MathNode(\"mtext\", [\n            text\n        ]);\n        node.setAttribute(\"mathvariant\", \"monospace\");\n        return node;\n    }\n});\n/**\n * Converts verb group into body string.\n *\n * \\verb* replaces each space with an open box \\u2423\n * \\verb replaces each space with a no-break space \\xA0\n */ var makeVerb = (group)=>group.body.replace(/ /g, group.star ? \"␣\" : \"\\xa0\");\n/** Include this to ensure that all functions are defined. */ var functions = _functions;\n/**\n * The Lexer class handles tokenizing the input in various ways. Since our\n * parser expects us to be able to backtrack, the lexer allows lexing from any\n * given starting point.\n *\n * Its main exposed function is the `lex` function, which takes a position to\n * lex from and a type of token to lex. It defers to the appropriate `_innerLex`\n * function.\n *\n * The various `_innerLex` functions perform the actual lexing of different\n * kinds.\n */ /* The following tokenRegex\n * - matches typical whitespace (but not NBSP etc.) using its first group\n * - does not match any control character \\x00-\\x1f except whitespace\n * - does not match a bare backslash\n * - matches any ASCII character except those just mentioned\n * - does not match the BMP private use area \\uE000-\\uF8FF\n * - does not match bare surrogate code units\n * - matches any BMP character except for those just described\n * - matches any valid Unicode surrogate pair\n * - matches a backslash followed by one or more whitespace characters\n * - matches a backslash followed by one or more letters then whitespace\n * - matches a backslash followed by any BMP character\n * Capturing groups:\n *   [1] regular whitespace\n *   [2] backslash followed by whitespace\n *   [3] anything else, which may include:\n *     [4] left character of \\verb*\n *     [5] left character of \\verb\n *     [6] backslash followed by word, excluding any trailing whitespace\n * Just because the Lexer matches something doesn't mean it's valid input:\n * If there is no matching function or symbol definition, the Parser will\n * still reject the input.\n */ var spaceRegexString = \"[ \\r\\n\t]\";\nvar controlWordRegexString = \"\\\\\\\\[a-zA-Z@]+\";\nvar controlSymbolRegexString = \"\\\\\\\\[^\\uD800-\\uDFFF]\";\nvar controlWordWhitespaceRegexString = \"(\" + controlWordRegexString + \")\" + spaceRegexString + \"*\";\nvar controlSpaceRegexString = \"\\\\\\\\(\\n|[ \\r\t]+\\n?)[ \\r\t]*\";\nvar combiningDiacriticalMarkString = \"[̀-ͯ]\";\nvar combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + \"+$\");\nvar tokenRegexString = \"(\" + spaceRegexString + \"+)|\" + (controlSpaceRegexString + \"|\") + // \\whitespace\n\"([!-\\\\[\\\\]-‧-豈-]\" + (combiningDiacriticalMarkString + \"*\") + // ...plus accents\n\"|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]\" + (combiningDiacriticalMarkString + \"*\") + // ...plus accents\n\"|\\\\\\\\verb\\\\*([^]).*?\\\\4\" + // \\verb*\n\"|\\\\\\\\verb([^*a-zA-Z]).*?\\\\5\" + (\"|\" + controlWordWhitespaceRegexString) + (\"|\" + controlSymbolRegexString + \")\"); // \\\\, \\', etc.\n/** Main Lexer class */ class Lexer {\n    // Category codes. The lexer only supports comment characters (14) for now.\n    // MacroExpander additionally distinguishes active (13).\n    constructor(input, settings){\n        this.input = void 0;\n        this.settings = void 0;\n        this.tokenRegex = void 0;\n        this.catcodes = void 0;\n        // Separate accents from characters\n        this.input = input;\n        this.settings = settings;\n        this.tokenRegex = new RegExp(tokenRegexString, \"g\");\n        this.catcodes = {\n            \"%\": 14,\n            // comment character\n            \"~\": 13 // active character\n        };\n    }\n    setCatcode(char, code) {\n        this.catcodes[char] = code;\n    }\n    /**\n   * This function lexes a single token.\n   */ lex() {\n        var input = this.input;\n        var pos = this.tokenRegex.lastIndex;\n        if (pos === input.length) {\n            return new Token(\"EOF\", new SourceLocation(this, pos, pos));\n        }\n        var match = this.tokenRegex.exec(input);\n        if (match === null || match.index !== pos) {\n            throw new ParseError(\"Unexpected character: '\" + input[pos] + \"'\", new Token(input[pos], new SourceLocation(this, pos, pos + 1)));\n        }\n        var text = match[6] || match[3] || (match[2] ? \"\\\\ \" : \" \");\n        if (this.catcodes[text] === 14) {\n            // comment character\n            var nlIndex = input.indexOf(\"\\n\", this.tokenRegex.lastIndex);\n            if (nlIndex === -1) {\n                this.tokenRegex.lastIndex = input.length; // EOF\n                this.settings.reportNonstrict(\"commentAtEnd\", \"% comment has no terminating newline; LaTeX would \" + \"fail because of commenting the end of math mode (e.g. $)\");\n            } else {\n                this.tokenRegex.lastIndex = nlIndex + 1;\n            }\n            return this.lex();\n        }\n        return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex));\n    }\n}\n/**\n * A `Namespace` refers to a space of nameable things like macros or lengths,\n * which can be `set` either globally or local to a nested group, using an\n * undo stack similar to how TeX implements this functionality.\n * Performance-wise, `get` and local `set` take constant time, while global\n * `set` takes time proportional to the depth of group nesting.\n */ class Namespace {\n    /**\n   * Both arguments are optional.  The first argument is an object of\n   * built-in mappings which never change.  The second argument is an object\n   * of initial (global-level) mappings, which will constantly change\n   * according to any global/top-level `set`s done.\n   */ constructor(builtins, globalMacros){\n        if (builtins === void 0) {\n            builtins = {};\n        }\n        if (globalMacros === void 0) {\n            globalMacros = {};\n        }\n        this.current = void 0;\n        this.builtins = void 0;\n        this.undefStack = void 0;\n        this.current = globalMacros;\n        this.builtins = builtins;\n        this.undefStack = [];\n    }\n    /**\n   * Start a new nested group, affecting future local `set`s.\n   */ beginGroup() {\n        this.undefStack.push({});\n    }\n    /**\n   * End current nested group, restoring values before the group began.\n   */ endGroup() {\n        if (this.undefStack.length === 0) {\n            throw new ParseError(\"Unbalanced namespace destruction: attempt \" + \"to pop global namespace; please report this as a bug\");\n        }\n        var undefs = this.undefStack.pop();\n        for(var undef in undefs){\n            if (undefs.hasOwnProperty(undef)) {\n                if (undefs[undef] == null) {\n                    delete this.current[undef];\n                } else {\n                    this.current[undef] = undefs[undef];\n                }\n            }\n        }\n    }\n    /**\n   * Ends all currently nested groups (if any), restoring values before the\n   * groups began.  Useful in case of an error in the middle of parsing.\n   */ endGroups() {\n        while(this.undefStack.length > 0){\n            this.endGroup();\n        }\n    }\n    /**\n   * Detect whether `name` has a definition.  Equivalent to\n   * `get(name) != null`.\n   */ has(name) {\n        return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name);\n    }\n    /**\n   * Get the current value of a name, or `undefined` if there is no value.\n   *\n   * Note: Do not use `if (namespace.get(...))` to detect whether a macro\n   * is defined, as the definition may be the empty string which evaluates\n   * to `false` in JavaScript.  Use `if (namespace.get(...) != null)` or\n   * `if (namespace.has(...))`.\n   */ get(name) {\n        if (this.current.hasOwnProperty(name)) {\n            return this.current[name];\n        } else {\n            return this.builtins[name];\n        }\n    }\n    /**\n   * Set the current value of a name, and optionally set it globally too.\n   * Local set() sets the current value and (when appropriate) adds an undo\n   * operation to the undo stack.  Global set() may change the undo\n   * operation at every level, so takes time linear in their number.\n   * A value of undefined means to delete existing definitions.\n   */ set(name, value, global) {\n        if (global === void 0) {\n            global = false;\n        }\n        if (global) {\n            // Global set is equivalent to setting in all groups.  Simulate this\n            // by destroying any undos currently scheduled for this name,\n            // and adding an undo with the *new* value (in case it later gets\n            // locally reset within this environment).\n            for(var i = 0; i < this.undefStack.length; i++){\n                delete this.undefStack[i][name];\n            }\n            if (this.undefStack.length > 0) {\n                this.undefStack[this.undefStack.length - 1][name] = value;\n            }\n        } else {\n            // Undo this set at end of this group (possibly to `undefined`),\n            // unless an undo is already in place, in which case that older\n            // value is the correct one.\n            var top = this.undefStack[this.undefStack.length - 1];\n            if (top && !top.hasOwnProperty(name)) {\n                top[name] = this.current[name];\n            }\n        }\n        if (value == null) {\n            delete this.current[name];\n        } else {\n            this.current[name] = value;\n        }\n    }\n}\n/**\n * Predefined macros for KaTeX.\n * This can be used to define some commands in terms of others.\n */ var macros = _macros;\n// macro tools\ndefineMacro(\"\\\\noexpand\", function(context) {\n    // The expansion is the token itself; but that token is interpreted\n    // as if its meaning were ‘\\relax’ if it is a control sequence that\n    // would ordinarily be expanded by TeX’s expansion rules.\n    var t = context.popToken();\n    if (context.isExpandable(t.text)) {\n        t.noexpand = true;\n        t.treatAsRelax = true;\n    }\n    return {\n        tokens: [\n            t\n        ],\n        numArgs: 0\n    };\n});\ndefineMacro(\"\\\\expandafter\", function(context) {\n    // TeX first reads the token that comes immediately after \\expandafter,\n    // without expanding it; let’s call this token t. Then TeX reads the\n    // token that comes after t (and possibly more tokens, if that token\n    // has an argument), replacing it by its expansion. Finally TeX puts\n    // t back in front of that expansion.\n    var t = context.popToken();\n    context.expandOnce(true); // expand only an expandable token\n    return {\n        tokens: [\n            t\n        ],\n        numArgs: 0\n    };\n}); // LaTeX's \\@firstoftwo{#1}{#2} expands to #1, skipping #2\n// TeX source: \\long\\def\\@firstoftwo#1#2{#1}\ndefineMacro(\"\\\\@firstoftwo\", function(context) {\n    var args = context.consumeArgs(2);\n    return {\n        tokens: args[0],\n        numArgs: 0\n    };\n}); // LaTeX's \\@secondoftwo{#1}{#2} expands to #2, skipping #1\n// TeX source: \\long\\def\\@secondoftwo#1#2{#2}\ndefineMacro(\"\\\\@secondoftwo\", function(context) {\n    var args = context.consumeArgs(2);\n    return {\n        tokens: args[1],\n        numArgs: 0\n    };\n}); // LaTeX's \\@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded)\n// symbol that isn't a space, consuming any spaces but not consuming the\n// first nonspace character.  If that nonspace character matches #1, then\n// the macro expands to #2; otherwise, it expands to #3.\ndefineMacro(\"\\\\@ifnextchar\", function(context) {\n    var args = context.consumeArgs(3); // symbol, if, else\n    context.consumeSpaces();\n    var nextToken = context.future();\n    if (args[0].length === 1 && args[0][0].text === nextToken.text) {\n        return {\n            tokens: args[1],\n            numArgs: 0\n        };\n    } else {\n        return {\n            tokens: args[2],\n            numArgs: 0\n        };\n    }\n}); // LaTeX's \\@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol.\n// If it is `*`, then it consumes the symbol, and the macro expands to #1;\n// otherwise, the macro expands to #2 (without consuming the symbol).\n// TeX source: \\def\\@ifstar#1{\\@ifnextchar *{\\@firstoftwo{#1}}}\ndefineMacro(\"\\\\@ifstar\", \"\\\\@ifnextchar *{\\\\@firstoftwo{#1}}\"); // LaTeX's \\TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode\ndefineMacro(\"\\\\TextOrMath\", function(context) {\n    var args = context.consumeArgs(2);\n    if (context.mode === \"text\") {\n        return {\n            tokens: args[0],\n            numArgs: 0\n        };\n    } else {\n        return {\n            tokens: args[1],\n            numArgs: 0\n        };\n    }\n}); // Lookup table for parsing numbers in base 8 through 16\nvar digitToNumber = {\n    \"0\": 0,\n    \"1\": 1,\n    \"2\": 2,\n    \"3\": 3,\n    \"4\": 4,\n    \"5\": 5,\n    \"6\": 6,\n    \"7\": 7,\n    \"8\": 8,\n    \"9\": 9,\n    \"a\": 10,\n    \"A\": 10,\n    \"b\": 11,\n    \"B\": 11,\n    \"c\": 12,\n    \"C\": 12,\n    \"d\": 13,\n    \"D\": 13,\n    \"e\": 14,\n    \"E\": 14,\n    \"f\": 15,\n    \"F\": 15\n}; // TeX \\char makes a literal character (catcode 12) using the following forms:\n// (see The TeXBook, p. 43)\n//   \\char123  -- decimal\n//   \\char'123 -- octal\n//   \\char\"123 -- hex\n//   \\char`x   -- character that can be written (i.e. isn't active)\n//   \\char`\\x  -- character that cannot be written (e.g. %)\n// These all refer to characters from the font, so we turn them into special\n// calls to a function \\@char dealt with in the Parser.\ndefineMacro(\"\\\\char\", function(context) {\n    var token = context.popToken();\n    var base;\n    var number = \"\";\n    if (token.text === \"'\") {\n        base = 8;\n        token = context.popToken();\n    } else if (token.text === '\"') {\n        base = 16;\n        token = context.popToken();\n    } else if (token.text === \"`\") {\n        token = context.popToken();\n        if (token.text[0] === \"\\\\\") {\n            number = token.text.charCodeAt(1);\n        } else if (token.text === \"EOF\") {\n            throw new ParseError(\"\\\\char` missing argument\");\n        } else {\n            number = token.text.charCodeAt(0);\n        }\n    } else {\n        base = 10;\n    }\n    if (base) {\n        // Parse a number in the given base, starting with first `token`.\n        number = digitToNumber[token.text];\n        if (number == null || number >= base) {\n            throw new ParseError(\"Invalid base-\" + base + \" digit \" + token.text);\n        }\n        var digit;\n        while((digit = digitToNumber[context.future().text]) != null && digit < base){\n            number *= base;\n            number += digit;\n            context.popToken();\n        }\n    }\n    return \"\\\\@char{\" + number + \"}\";\n}); // \\newcommand{\\macro}[args]{definition}\n// \\renewcommand{\\macro}[args]{definition}\n// TODO: Optional arguments: \\newcommand{\\macro}[args][default]{definition}\nvar newcommand = (context, existsOK, nonexistsOK)=>{\n    var arg = context.consumeArg().tokens;\n    if (arg.length !== 1) {\n        throw new ParseError(\"\\\\newcommand's first argument must be a macro name\");\n    }\n    var name = arg[0].text;\n    var exists = context.isDefined(name);\n    if (exists && !existsOK) {\n        throw new ParseError(\"\\\\newcommand{\" + name + \"} attempting to redefine \" + (name + \"; use \\\\renewcommand\"));\n    }\n    if (!exists && !nonexistsOK) {\n        throw new ParseError(\"\\\\renewcommand{\" + name + \"} when command \" + name + \" \" + \"does not yet exist; use \\\\newcommand\");\n    }\n    var numArgs = 0;\n    arg = context.consumeArg().tokens;\n    if (arg.length === 1 && arg[0].text === \"[\") {\n        var argText = \"\";\n        var token = context.expandNextToken();\n        while(token.text !== \"]\" && token.text !== \"EOF\"){\n            // TODO: Should properly expand arg, e.g., ignore {}s\n            argText += token.text;\n            token = context.expandNextToken();\n        }\n        if (!argText.match(/^\\s*[0-9]+\\s*$/)) {\n            throw new ParseError(\"Invalid number of arguments: \" + argText);\n        }\n        numArgs = parseInt(argText);\n        arg = context.consumeArg().tokens;\n    } // Final arg is the expansion of the macro\n    context.macros.set(name, {\n        tokens: arg,\n        numArgs\n    });\n    return \"\";\n};\ndefineMacro(\"\\\\newcommand\", (context)=>newcommand(context, false, true));\ndefineMacro(\"\\\\renewcommand\", (context)=>newcommand(context, true, false));\ndefineMacro(\"\\\\providecommand\", (context)=>newcommand(context, true, true)); // terminal (console) tools\ndefineMacro(\"\\\\message\", (context)=>{\n    var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n    console.log(arg.reverse().map((token)=>token.text).join(\"\"));\n    return \"\";\n});\ndefineMacro(\"\\\\errmessage\", (context)=>{\n    var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n    console.error(arg.reverse().map((token)=>token.text).join(\"\"));\n    return \"\";\n});\ndefineMacro(\"\\\\show\", (context)=>{\n    var tok = context.popToken();\n    var name = tok.text; // eslint-disable-next-line no-console\n    console.log(tok, context.macros.get(name), functions[name], symbols.math[name], symbols.text[name]);\n    return \"\";\n}); //////////////////////////////////////////////////////////////////////\n// Grouping\n// \\let\\bgroup={ \\let\\egroup=}\ndefineMacro(\"\\\\bgroup\", \"{\");\ndefineMacro(\"\\\\egroup\", \"}\"); // Symbols from latex.ltx:\n// \\def~{\\nobreakspace{}}\n// \\def\\lq{`}\n// \\def\\rq{'}\n// \\def \\aa {\\r a}\n// \\def \\AA {\\r A}\ndefineMacro(\"~\", \"\\\\nobreakspace\");\ndefineMacro(\"\\\\lq\", \"`\");\ndefineMacro(\"\\\\rq\", \"'\");\ndefineMacro(\"\\\\aa\", \"\\\\r a\");\ndefineMacro(\"\\\\AA\", \"\\\\r A\"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML.\n// \\DeclareTextCommandDefault{\\textcopyright}{\\textcircled{c}}\n// \\DeclareTextCommandDefault{\\textregistered}{\\textcircled{%\n//      \\check@mathfonts\\fontsize\\sf@size\\z@\\math@fontsfalse\\selectfont R}}\n// \\DeclareRobustCommand{\\copyright}{%\n//    \\ifmmode{\\nfss@text{\\textcopyright}}\\else\\textcopyright\\fi}\ndefineMacro(\"\\\\textcopyright\", \"\\\\html@mathml{\\\\textcircled{c}}{\\\\char`\\xa9}\");\ndefineMacro(\"\\\\copyright\", \"\\\\TextOrMath{\\\\textcopyright}{\\\\text{\\\\textcopyright}}\");\ndefineMacro(\"\\\\textregistered\", \"\\\\html@mathml{\\\\textcircled{\\\\scriptsize R}}{\\\\char`\\xae}\"); // Characters omitted from Unicode range 1D400–1D7FF\ndefineMacro(\"ℬ\", \"\\\\mathscr{B}\"); // script\ndefineMacro(\"ℰ\", \"\\\\mathscr{E}\");\ndefineMacro(\"ℱ\", \"\\\\mathscr{F}\");\ndefineMacro(\"ℋ\", \"\\\\mathscr{H}\");\ndefineMacro(\"ℐ\", \"\\\\mathscr{I}\");\ndefineMacro(\"ℒ\", \"\\\\mathscr{L}\");\ndefineMacro(\"ℳ\", \"\\\\mathscr{M}\");\ndefineMacro(\"ℛ\", \"\\\\mathscr{R}\");\ndefineMacro(\"ℭ\", \"\\\\mathfrak{C}\"); // Fraktur\ndefineMacro(\"ℌ\", \"\\\\mathfrak{H}\");\ndefineMacro(\"ℨ\", \"\\\\mathfrak{Z}\"); // Define \\Bbbk with a macro that works in both HTML and MathML.\ndefineMacro(\"\\\\Bbbk\", \"\\\\Bbb{k}\"); // Unicode middle dot\n// The KaTeX fonts do not contain U+00B7. Instead, \\cdotp displays\n// the dot at U+22C5 and gives it punct spacing.\ndefineMacro(\"\\xb7\", \"\\\\cdotp\"); // \\llap and \\rlap render their contents in text mode\ndefineMacro(\"\\\\llap\", \"\\\\mathllap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\rlap\", \"\\\\mathrlap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\clap\", \"\\\\mathclap{\\\\textrm{#1}}\"); // \\mathstrut from the TeXbook, p 360\ndefineMacro(\"\\\\mathstrut\", \"\\\\vphantom{(}\"); // \\underbar from TeXbook p 353\ndefineMacro(\"\\\\underbar\", \"\\\\underline{\\\\text{#1}}\"); // \\not is defined by base/fontmath.ltx via\n// \\DeclareMathSymbol{\\not}{\\mathrel}{symbols}{\"36}\n// It's thus treated like a \\mathrel, but defined by a symbol that has zero\n// width but extends to the right.  We use \\rlap to get that spacing.\n// For MathML we write U+0338 here. buildMathML.js will then do the overlay.\ndefineMacro(\"\\\\not\", '\\\\html@mathml{\\\\mathrel{\\\\mathrlap\\\\@not}}{\\\\char\"338}'); // Negated symbols from base/fontmath.ltx:\n// \\def\\neq{\\not=} \\let\\ne=\\neq\n// \\DeclareRobustCommand\n//   \\notin{\\mathrel{\\m@th\\mathpalette\\c@ncel\\in}}\n// \\def\\c@ncel#1#2{\\m@th\\ooalign{$\\hfil#1\\mkern1mu/\\hfil$\\crcr$#1#2$}}\ndefineMacro(\"\\\\neq\", \"\\\\html@mathml{\\\\mathrel{\\\\not=}}{\\\\mathrel{\\\\char`≠}}\");\ndefineMacro(\"\\\\ne\", \"\\\\neq\");\ndefineMacro(\"≠\", \"\\\\neq\");\ndefineMacro(\"\\\\notin\", \"\\\\html@mathml{\\\\mathrel{{\\\\in}\\\\mathllap{/\\\\mskip1mu}}}\" + \"{\\\\mathrel{\\\\char`∉}}\");\ndefineMacro(\"∉\", \"\\\\notin\"); // Unicode stacked relations\ndefineMacro(\"≘\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\kern{-1em}\\\\raisebox{0.4em}{$\\\\scriptsize\\\\frown$}}\" + \"}{\\\\mathrel{\\\\char`≘}}\");\ndefineMacro(\"≙\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\wedge}{=}}{\\\\mathrel{\\\\char`≘}}\");\ndefineMacro(\"≚\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\vee}{=}}{\\\\mathrel{\\\\char`≚}}\");\ndefineMacro(\"≛\", \"\\\\html@mathml{\\\\stackrel{\\\\scriptsize\\\\star}{=}}\" + \"{\\\\mathrel{\\\\char`≛}}\");\ndefineMacro(\"≝\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{def}}{=}}\" + \"{\\\\mathrel{\\\\char`≝}}\");\ndefineMacro(\"≞\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{m}}{=}}\" + \"{\\\\mathrel{\\\\char`≞}}\");\ndefineMacro(\"≟\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny?}{=}}{\\\\mathrel{\\\\char`≟}}\"); // Misc Unicode\ndefineMacro(\"⟂\", \"\\\\perp\");\ndefineMacro(\"‼\", \"\\\\mathclose{!\\\\mkern-0.8mu!}\");\ndefineMacro(\"∌\", \"\\\\notni\");\ndefineMacro(\"⌜\", \"\\\\ulcorner\");\ndefineMacro(\"⌝\", \"\\\\urcorner\");\ndefineMacro(\"⌞\", \"\\\\llcorner\");\ndefineMacro(\"⌟\", \"\\\\lrcorner\");\ndefineMacro(\"\\xa9\", \"\\\\copyright\");\ndefineMacro(\"\\xae\", \"\\\\textregistered\");\ndefineMacro(\"️\", \"\\\\textregistered\"); // The KaTeX fonts have corners at codepoints that don't match Unicode.\n// For MathML purposes, use the Unicode code point.\ndefineMacro(\"\\\\ulcorner\", '\\\\html@mathml{\\\\@ulcorner}{\\\\mathop{\\\\char\"231c}}');\ndefineMacro(\"\\\\urcorner\", '\\\\html@mathml{\\\\@urcorner}{\\\\mathop{\\\\char\"231d}}');\ndefineMacro(\"\\\\llcorner\", '\\\\html@mathml{\\\\@llcorner}{\\\\mathop{\\\\char\"231e}}');\ndefineMacro(\"\\\\lrcorner\", '\\\\html@mathml{\\\\@lrcorner}{\\\\mathop{\\\\char\"231f}}'); //////////////////////////////////////////////////////////////////////\n// LaTeX_2ε\n// \\vdots{\\vbox{\\baselineskip4\\p@  \\lineskiplimit\\z@\n// \\kern6\\p@\\hbox{.}\\hbox{.}\\hbox{.}}}\n// We'll call \\varvdots, which gets a glyph from symbols.js.\n// The zero-width rule gets us an equivalent to the vertical 6pt kern.\ndefineMacro(\"\\\\vdots\", \"\\\\mathord{\\\\varvdots\\\\rule{0pt}{15pt}}\");\ndefineMacro(\"⋮\", \"\\\\vdots\"); //////////////////////////////////////////////////////////////////////\n// amsmath.sty\n// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf\n// Italic Greek capital letters.  AMS defines these with \\DeclareMathSymbol,\n// but they are equivalent to \\mathit{\\Letter}.\ndefineMacro(\"\\\\varGamma\", \"\\\\mathit{\\\\Gamma}\");\ndefineMacro(\"\\\\varDelta\", \"\\\\mathit{\\\\Delta}\");\ndefineMacro(\"\\\\varTheta\", \"\\\\mathit{\\\\Theta}\");\ndefineMacro(\"\\\\varLambda\", \"\\\\mathit{\\\\Lambda}\");\ndefineMacro(\"\\\\varXi\", \"\\\\mathit{\\\\Xi}\");\ndefineMacro(\"\\\\varPi\", \"\\\\mathit{\\\\Pi}\");\ndefineMacro(\"\\\\varSigma\", \"\\\\mathit{\\\\Sigma}\");\ndefineMacro(\"\\\\varUpsilon\", \"\\\\mathit{\\\\Upsilon}\");\ndefineMacro(\"\\\\varPhi\", \"\\\\mathit{\\\\Phi}\");\ndefineMacro(\"\\\\varPsi\", \"\\\\mathit{\\\\Psi}\");\ndefineMacro(\"\\\\varOmega\", \"\\\\mathit{\\\\Omega}\"); //\\newcommand{\\substack}[1]{\\subarray{c}#1\\endsubarray}\ndefineMacro(\"\\\\substack\", \"\\\\begin{subarray}{c}#1\\\\end{subarray}\"); // \\renewcommand{\\colon}{\\nobreak\\mskip2mu\\mathpunct{}\\nonscript\n// \\mkern-\\thinmuskip{:}\\mskip6muplus1mu\\relax}\ndefineMacro(\"\\\\colon\", \"\\\\nobreak\\\\mskip2mu\\\\mathpunct{}\" + \"\\\\mathchoice{\\\\mkern-3mu}{\\\\mkern-3mu}{}{}{:}\\\\mskip6mu\\\\relax\"); // \\newcommand{\\boxed}[1]{\\fbox{\\m@th$\\displaystyle#1$}}\ndefineMacro(\"\\\\boxed\", \"\\\\fbox{$\\\\displaystyle{#1}$}\"); // \\def\\iff{\\DOTSB\\;\\Longleftrightarrow\\;}\n// \\def\\implies{\\DOTSB\\;\\Longrightarrow\\;}\n// \\def\\impliedby{\\DOTSB\\;\\Longleftarrow\\;}\ndefineMacro(\"\\\\iff\", \"\\\\DOTSB\\\\;\\\\Longleftrightarrow\\\\;\");\ndefineMacro(\"\\\\implies\", \"\\\\DOTSB\\\\;\\\\Longrightarrow\\\\;\");\ndefineMacro(\"\\\\impliedby\", \"\\\\DOTSB\\\\;\\\\Longleftarrow\\\\;\"); // AMSMath's automatic \\dots, based on \\mdots@@ macro.\nvar dotsByToken = {\n    \",\": \"\\\\dotsc\",\n    \"\\\\not\": \"\\\\dotsb\",\n    // \\keybin@ checks for the following:\n    \"+\": \"\\\\dotsb\",\n    \"=\": \"\\\\dotsb\",\n    \"<\": \"\\\\dotsb\",\n    \">\": \"\\\\dotsb\",\n    \"-\": \"\\\\dotsb\",\n    \"*\": \"\\\\dotsb\",\n    \":\": \"\\\\dotsb\",\n    // Symbols whose definition starts with \\DOTSB:\n    \"\\\\DOTSB\": \"\\\\dotsb\",\n    \"\\\\coprod\": \"\\\\dotsb\",\n    \"\\\\bigvee\": \"\\\\dotsb\",\n    \"\\\\bigwedge\": \"\\\\dotsb\",\n    \"\\\\biguplus\": \"\\\\dotsb\",\n    \"\\\\bigcap\": \"\\\\dotsb\",\n    \"\\\\bigcup\": \"\\\\dotsb\",\n    \"\\\\prod\": \"\\\\dotsb\",\n    \"\\\\sum\": \"\\\\dotsb\",\n    \"\\\\bigotimes\": \"\\\\dotsb\",\n    \"\\\\bigoplus\": \"\\\\dotsb\",\n    \"\\\\bigodot\": \"\\\\dotsb\",\n    \"\\\\bigsqcup\": \"\\\\dotsb\",\n    \"\\\\And\": \"\\\\dotsb\",\n    \"\\\\longrightarrow\": \"\\\\dotsb\",\n    \"\\\\Longrightarrow\": \"\\\\dotsb\",\n    \"\\\\longleftarrow\": \"\\\\dotsb\",\n    \"\\\\Longleftarrow\": \"\\\\dotsb\",\n    \"\\\\longleftrightarrow\": \"\\\\dotsb\",\n    \"\\\\Longleftrightarrow\": \"\\\\dotsb\",\n    \"\\\\mapsto\": \"\\\\dotsb\",\n    \"\\\\longmapsto\": \"\\\\dotsb\",\n    \"\\\\hookrightarrow\": \"\\\\dotsb\",\n    \"\\\\doteq\": \"\\\\dotsb\",\n    // Symbols whose definition starts with \\mathbin:\n    \"\\\\mathbin\": \"\\\\dotsb\",\n    // Symbols whose definition starts with \\mathrel:\n    \"\\\\mathrel\": \"\\\\dotsb\",\n    \"\\\\relbar\": \"\\\\dotsb\",\n    \"\\\\Relbar\": \"\\\\dotsb\",\n    \"\\\\xrightarrow\": \"\\\\dotsb\",\n    \"\\\\xleftarrow\": \"\\\\dotsb\",\n    // Symbols whose definition starts with \\DOTSI:\n    \"\\\\DOTSI\": \"\\\\dotsi\",\n    \"\\\\int\": \"\\\\dotsi\",\n    \"\\\\oint\": \"\\\\dotsi\",\n    \"\\\\iint\": \"\\\\dotsi\",\n    \"\\\\iiint\": \"\\\\dotsi\",\n    \"\\\\iiiint\": \"\\\\dotsi\",\n    \"\\\\idotsint\": \"\\\\dotsi\",\n    // Symbols whose definition starts with \\DOTSX:\n    \"\\\\DOTSX\": \"\\\\dotsx\"\n};\ndefineMacro(\"\\\\dots\", function(context) {\n    // TODO: If used in text mode, should expand to \\textellipsis.\n    // However, in KaTeX, \\textellipsis and \\ldots behave the same\n    // (in text mode), and it's unlikely we'd see any of the math commands\n    // that affect the behavior of \\dots when in text mode.  So fine for now\n    // (until we support \\ifmmode ... \\else ... \\fi).\n    var thedots = \"\\\\dotso\";\n    var next = context.expandAfterFuture().text;\n    if (next in dotsByToken) {\n        thedots = dotsByToken[next];\n    } else if (next.slice(0, 4) === \"\\\\not\") {\n        thedots = \"\\\\dotsb\";\n    } else if (next in symbols.math) {\n        if (utils.contains([\n            \"bin\",\n            \"rel\"\n        ], symbols.math[next].group)) {\n            thedots = \"\\\\dotsb\";\n        }\n    }\n    return thedots;\n});\nvar spaceAfterDots = {\n    // \\rightdelim@ checks for the following:\n    \")\": true,\n    \"]\": true,\n    \"\\\\rbrack\": true,\n    \"\\\\}\": true,\n    \"\\\\rbrace\": true,\n    \"\\\\rangle\": true,\n    \"\\\\rceil\": true,\n    \"\\\\rfloor\": true,\n    \"\\\\rgroup\": true,\n    \"\\\\rmoustache\": true,\n    \"\\\\right\": true,\n    \"\\\\bigr\": true,\n    \"\\\\biggr\": true,\n    \"\\\\Bigr\": true,\n    \"\\\\Biggr\": true,\n    // \\extra@ also tests for the following:\n    \"$\": true,\n    // \\extrap@ checks for the following:\n    \";\": true,\n    \".\": true,\n    \",\": true\n};\ndefineMacro(\"\\\\dotso\", function(context) {\n    var next = context.future().text;\n    if (next in spaceAfterDots) {\n        return \"\\\\ldots\\\\,\";\n    } else {\n        return \"\\\\ldots\";\n    }\n});\ndefineMacro(\"\\\\dotsc\", function(context) {\n    var next = context.future().text; // \\dotsc uses \\extra@ but not \\extrap@, instead specially checking for\n    // ';' and '.', but doesn't check for ','.\n    if (next in spaceAfterDots && next !== \",\") {\n        return \"\\\\ldots\\\\,\";\n    } else {\n        return \"\\\\ldots\";\n    }\n});\ndefineMacro(\"\\\\cdots\", function(context) {\n    var next = context.future().text;\n    if (next in spaceAfterDots) {\n        return \"\\\\@cdots\\\\,\";\n    } else {\n        return \"\\\\@cdots\";\n    }\n});\ndefineMacro(\"\\\\dotsb\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsm\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsi\", \"\\\\!\\\\cdots\"); // amsmath doesn't actually define \\dotsx, but \\dots followed by a macro\n// starting with \\DOTSX implies \\dotso, and then \\extra@ detects this case\n// and forces the added `\\,`.\ndefineMacro(\"\\\\dotsx\", \"\\\\ldots\\\\,\"); // \\let\\DOTSI\\relax\n// \\let\\DOTSB\\relax\n// \\let\\DOTSX\\relax\ndefineMacro(\"\\\\DOTSI\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSB\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSX\", \"\\\\relax\"); // Spacing, based on amsmath.sty's override of LaTeX defaults\n// \\DeclareRobustCommand{\\tmspace}[3]{%\n//   \\ifmmode\\mskip#1#2\\else\\kern#1#3\\fi\\relax}\ndefineMacro(\"\\\\tmspace\", \"\\\\TextOrMath{\\\\kern#1#3}{\\\\mskip#1#2}\\\\relax\"); // \\renewcommand{\\,}{\\tmspace+\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\ndefineMacro(\"\\\\,\", \"\\\\tmspace+{3mu}{.1667em}\"); // \\let\\thinspace\\,\ndefineMacro(\"\\\\thinspace\", \"\\\\,\"); // \\def\\>{\\mskip\\medmuskip}\n// \\renewcommand{\\:}{\\tmspace+\\medmuskip{.2222em}}\n// TODO: \\> and math mode of \\: should use \\medmuskip = 4mu plus 2mu minus 4mu\ndefineMacro(\"\\\\>\", \"\\\\mskip{4mu}\");\ndefineMacro(\"\\\\:\", \"\\\\tmspace+{4mu}{.2222em}\"); // \\let\\medspace\\:\ndefineMacro(\"\\\\medspace\", \"\\\\:\"); // \\renewcommand{\\;}{\\tmspace+\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip = 5mu plus 5mu\ndefineMacro(\"\\\\;\", \"\\\\tmspace+{5mu}{.2777em}\"); // \\let\\thickspace\\;\ndefineMacro(\"\\\\thickspace\", \"\\\\;\"); // \\renewcommand{\\!}{\\tmspace-\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\ndefineMacro(\"\\\\!\", \"\\\\tmspace-{3mu}{.1667em}\"); // \\let\\negthinspace\\!\ndefineMacro(\"\\\\negthinspace\", \"\\\\!\"); // \\newcommand{\\negmedspace}{\\tmspace-\\medmuskip{.2222em}}\n// TODO: math mode should use \\medmuskip\ndefineMacro(\"\\\\negmedspace\", \"\\\\tmspace-{4mu}{.2222em}\"); // \\newcommand{\\negthickspace}{\\tmspace-\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip\ndefineMacro(\"\\\\negthickspace\", \"\\\\tmspace-{5mu}{.277em}\"); // \\def\\enspace{\\kern.5em }\ndefineMacro(\"\\\\enspace\", \"\\\\kern.5em \"); // \\def\\enskip{\\hskip.5em\\relax}\ndefineMacro(\"\\\\enskip\", \"\\\\hskip.5em\\\\relax\"); // \\def\\quad{\\hskip1em\\relax}\ndefineMacro(\"\\\\quad\", \"\\\\hskip1em\\\\relax\"); // \\def\\qquad{\\hskip2em\\relax}\ndefineMacro(\"\\\\qquad\", \"\\\\hskip2em\\\\relax\"); // \\tag@in@display form of \\tag\ndefineMacro(\"\\\\tag\", \"\\\\@ifstar\\\\tag@literal\\\\tag@paren\");\ndefineMacro(\"\\\\tag@paren\", \"\\\\tag@literal{({#1})}\");\ndefineMacro(\"\\\\tag@literal\", (context)=>{\n    if (context.macros.get(\"\\\\df@tag\")) {\n        throw new ParseError(\"Multiple \\\\tag\");\n    }\n    return \"\\\\gdef\\\\df@tag{\\\\text{#1}}\";\n}); // \\renewcommand{\\bmod}{\\nonscript\\mskip-\\medmuskip\\mkern5mu\\mathbin\n//   {\\operator@font mod}\\penalty900\n//   \\mkern5mu\\nonscript\\mskip-\\medmuskip}\n// \\newcommand{\\pod}[1]{\\allowbreak\n//   \\if@display\\mkern18mu\\else\\mkern8mu\\fi(#1)}\n// \\renewcommand{\\pmod}[1]{\\pod{{\\operator@font mod}\\mkern6mu#1}}\n// \\newcommand{\\mod}[1]{\\allowbreak\\if@display\\mkern18mu\n//   \\else\\mkern12mu\\fi{\\operator@font mod}\\,\\,#1}\n// TODO: math mode should use \\medmuskip = 4mu plus 2mu minus 4mu\ndefineMacro(\"\\\\bmod\", \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\" + \"\\\\mathbin{\\\\rm mod}\" + \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\");\ndefineMacro(\"\\\\pod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern8mu}{\\\\mkern8mu}{\\\\mkern8mu}(#1)\");\ndefineMacro(\"\\\\pmod\", \"\\\\pod{{\\\\rm mod}\\\\mkern6mu#1}\");\ndefineMacro(\"\\\\mod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern12mu}{\\\\mkern12mu}{\\\\mkern12mu}\" + \"{\\\\rm mod}\\\\,\\\\,#1\"); //////////////////////////////////////////////////////////////////////\n// LaTeX source2e\n// \\expandafter\\let\\expandafter\\@normalcr\n//     \\csname\\expandafter\\@gobble\\string\\\\ \\endcsname\n// \\DeclareRobustCommand\\newline{\\@normalcr\\relax}\ndefineMacro(\"\\\\newline\", \"\\\\\\\\\\\\relax\"); // \\def\\TeX{T\\kern-.1667em\\lower.5ex\\hbox{E}\\kern-.125emX\\@}\n// TODO: Doesn't normally work in math mode because \\@ fails.  KaTeX doesn't\n// support \\@ yet, so that's omitted, and we add \\text so that the result\n// doesn't look funny in math mode.\ndefineMacro(\"\\\\TeX\", \"\\\\textrm{\\\\html@mathml{\" + \"T\\\\kern-.1667em\\\\raisebox{-.5ex}{E}\\\\kern-.125emX\" + \"}{TeX}}\"); // \\DeclareRobustCommand{\\LaTeX}{L\\kern-.36em%\n//         {\\sbox\\z@ T%\n//          \\vbox to\\ht\\z@{\\hbox{\\check@mathfonts\n//                               \\fontsize\\sf@size\\z@\n//                               \\math@fontsfalse\\selectfont\n//                               A}%\n//                         \\vss}%\n//         }%\n//         \\kern-.15em%\n//         \\TeX}\n// This code aligns the top of the A with the T (from the perspective of TeX's\n// boxes, though visually the A appears to extend above slightly).\n// We compute the corresponding \\raisebox when A is rendered in \\normalsize\n// \\scriptstyle, which has a scale factor of 0.7 (see Options.js).\nvar latexRaiseA = makeEm(fontMetricsData[\"Main-Regular\"][\"T\".charCodeAt(0)][1] - 0.7 * fontMetricsData[\"Main-Regular\"][\"A\".charCodeAt(0)][1]);\ndefineMacro(\"\\\\LaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"L\\\\kern-.36em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{LaTeX}}\"); // New KaTeX logo based on tweaking LaTeX logo\ndefineMacro(\"\\\\KaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"K\\\\kern-.17em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{KaTeX}}\"); // \\DeclareRobustCommand\\hspace{\\@ifstar\\@hspacer\\@hspace}\n// \\def\\@hspace#1{\\hskip  #1\\relax}\n// \\def\\@hspacer#1{\\vrule \\@width\\z@\\nobreak\n//                 \\hskip #1\\hskip \\z@skip}\ndefineMacro(\"\\\\hspace\", \"\\\\@ifstar\\\\@hspacer\\\\@hspace\");\ndefineMacro(\"\\\\@hspace\", \"\\\\hskip #1\\\\relax\");\ndefineMacro(\"\\\\@hspacer\", \"\\\\rule{0pt}{0pt}\\\\hskip #1\\\\relax\"); //////////////////////////////////////////////////////////////////////\n// mathtools.sty\n//\\providecommand\\ordinarycolon{:}\ndefineMacro(\"\\\\ordinarycolon\", \":\"); //\\def\\vcentcolon{\\mathrel{\\mathop\\ordinarycolon}}\n//TODO(edemaine): Not yet centered. Fix via \\raisebox or #726\ndefineMacro(\"\\\\vcentcolon\", \"\\\\mathrel{\\\\mathop\\\\ordinarycolon}\"); // \\providecommand*\\dblcolon{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}\ndefineMacro(\"\\\\dblcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-.9mu}\\\\vcentcolon}}\" + '{\\\\mathop{\\\\char\"2237}}'); // \\providecommand*\\coloneqq{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}\ndefineMacro(\"\\\\coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + '{\\\\mathop{\\\\char\"2254}}'); // ≔\n// \\providecommand*\\Coloneqq{\\dblcolon\\mathrel{\\mkern-1.2mu}=}\ndefineMacro(\"\\\\Coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + '{\\\\mathop{\\\\char\"2237\\\\char\"3d}}'); // \\providecommand*\\coloneq{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\ndefineMacro(\"\\\\coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + '{\\\\mathop{\\\\char\"3a\\\\char\"2212}}'); // \\providecommand*\\Coloneq{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\ndefineMacro(\"\\\\Coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + '{\\\\mathop{\\\\char\"2237\\\\char\"2212}}'); // \\providecommand*\\eqqcolon{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}\ndefineMacro(\"\\\\eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + '{\\\\mathop{\\\\char\"2255}}'); // ≕\n// \\providecommand*\\Eqqcolon{=\\mathrel{\\mkern-1.2mu}\\dblcolon}\ndefineMacro(\"\\\\Eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + '{\\\\mathop{\\\\char\"3d\\\\char\"2237}}'); // \\providecommand*\\eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}\ndefineMacro(\"\\\\eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + '{\\\\mathop{\\\\char\"2239}}'); // \\providecommand*\\Eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}\ndefineMacro(\"\\\\Eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + '{\\\\mathop{\\\\char\"2212\\\\char\"2237}}'); // \\providecommand*\\colonapprox{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}\ndefineMacro(\"\\\\colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + '{\\\\mathop{\\\\char\"3a\\\\char\"2248}}'); // \\providecommand*\\Colonapprox{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}\ndefineMacro(\"\\\\Colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + '{\\\\mathop{\\\\char\"2237\\\\char\"2248}}'); // \\providecommand*\\colonsim{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}\ndefineMacro(\"\\\\colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + '{\\\\mathop{\\\\char\"3a\\\\char\"223c}}'); // \\providecommand*\\Colonsim{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}\ndefineMacro(\"\\\\Colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + '{\\\\mathop{\\\\char\"2237\\\\char\"223c}}'); // Some Unicode characters are implemented with macros to mathtools functions.\ndefineMacro(\"∷\", \"\\\\dblcolon\"); // ::\ndefineMacro(\"∹\", \"\\\\eqcolon\"); // -:\ndefineMacro(\"≔\", \"\\\\coloneqq\"); // :=\ndefineMacro(\"≕\", \"\\\\eqqcolon\"); // =:\ndefineMacro(\"⩴\", \"\\\\Coloneqq\"); // ::=\n//////////////////////////////////////////////////////////////////////\n// colonequals.sty\n// Alternate names for mathtools's macros:\ndefineMacro(\"\\\\ratio\", \"\\\\vcentcolon\");\ndefineMacro(\"\\\\coloncolon\", \"\\\\dblcolon\");\ndefineMacro(\"\\\\colonequals\", \"\\\\coloneqq\");\ndefineMacro(\"\\\\coloncolonequals\", \"\\\\Coloneqq\");\ndefineMacro(\"\\\\equalscolon\", \"\\\\eqqcolon\");\ndefineMacro(\"\\\\equalscoloncolon\", \"\\\\Eqqcolon\");\ndefineMacro(\"\\\\colonminus\", \"\\\\coloneq\");\ndefineMacro(\"\\\\coloncolonminus\", \"\\\\Coloneq\");\ndefineMacro(\"\\\\minuscolon\", \"\\\\eqcolon\");\ndefineMacro(\"\\\\minuscoloncolon\", \"\\\\Eqcolon\"); // \\colonapprox name is same in mathtools and colonequals.\ndefineMacro(\"\\\\coloncolonapprox\", \"\\\\Colonapprox\"); // \\colonsim name is same in mathtools and colonequals.\ndefineMacro(\"\\\\coloncolonsim\", \"\\\\Colonsim\"); // Additional macros, implemented by analogy with mathtools definitions:\ndefineMacro(\"\\\\simcolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\simcoloncolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\");\ndefineMacro(\"\\\\approxcolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\approxcoloncolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\"); // Present in newtxmath, pxfonts and txfonts\ndefineMacro(\"\\\\notni\", \"\\\\html@mathml{\\\\not\\\\ni}{\\\\mathrel{\\\\char`∌}}\");\ndefineMacro(\"\\\\limsup\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,sup}\");\ndefineMacro(\"\\\\liminf\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,inf}\"); //////////////////////////////////////////////////////////////////////\n// From amsopn.sty\ndefineMacro(\"\\\\injlim\", \"\\\\DOTSB\\\\operatorname*{inj\\\\,lim}\");\ndefineMacro(\"\\\\projlim\", \"\\\\DOTSB\\\\operatorname*{proj\\\\,lim}\");\ndefineMacro(\"\\\\varlimsup\", \"\\\\DOTSB\\\\operatorname*{\\\\overline{lim}}\");\ndefineMacro(\"\\\\varliminf\", \"\\\\DOTSB\\\\operatorname*{\\\\underline{lim}}\");\ndefineMacro(\"\\\\varinjlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underrightarrow{lim}}\");\ndefineMacro(\"\\\\varprojlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underleftarrow{lim}}\"); //////////////////////////////////////////////////////////////////////\n// MathML alternates for KaTeX glyphs in the Unicode private area\ndefineMacro(\"\\\\gvertneqq\", \"\\\\html@mathml{\\\\@gvertneqq}{≩}\");\ndefineMacro(\"\\\\lvertneqq\", \"\\\\html@mathml{\\\\@lvertneqq}{≨}\");\ndefineMacro(\"\\\\ngeqq\", \"\\\\html@mathml{\\\\@ngeqq}{≱}\");\ndefineMacro(\"\\\\ngeqslant\", \"\\\\html@mathml{\\\\@ngeqslant}{≱}\");\ndefineMacro(\"\\\\nleqq\", \"\\\\html@mathml{\\\\@nleqq}{≰}\");\ndefineMacro(\"\\\\nleqslant\", \"\\\\html@mathml{\\\\@nleqslant}{≰}\");\ndefineMacro(\"\\\\nshortmid\", \"\\\\html@mathml{\\\\@nshortmid}{∤}\");\ndefineMacro(\"\\\\nshortparallel\", \"\\\\html@mathml{\\\\@nshortparallel}{∦}\");\ndefineMacro(\"\\\\nsubseteqq\", \"\\\\html@mathml{\\\\@nsubseteqq}{⊈}\");\ndefineMacro(\"\\\\nsupseteqq\", \"\\\\html@mathml{\\\\@nsupseteqq}{⊉}\");\ndefineMacro(\"\\\\varsubsetneq\", \"\\\\html@mathml{\\\\@varsubsetneq}{⊊}\");\ndefineMacro(\"\\\\varsubsetneqq\", \"\\\\html@mathml{\\\\@varsubsetneqq}{⫋}\");\ndefineMacro(\"\\\\varsupsetneq\", \"\\\\html@mathml{\\\\@varsupsetneq}{⊋}\");\ndefineMacro(\"\\\\varsupsetneqq\", \"\\\\html@mathml{\\\\@varsupsetneqq}{⫌}\");\ndefineMacro(\"\\\\imath\", \"\\\\html@mathml{\\\\@imath}{ı}\");\ndefineMacro(\"\\\\jmath\", \"\\\\html@mathml{\\\\@jmath}{ȷ}\"); //////////////////////////////////////////////////////////////////////\n// stmaryrd and semantic\n// The stmaryrd and semantic packages render the next four items by calling a\n// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros.\ndefineMacro(\"\\\\llbracket\", \"\\\\html@mathml{\" + \"\\\\mathopen{[\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`⟦}}\");\ndefineMacro(\"\\\\rrbracket\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu]}}\" + \"{\\\\mathclose{\\\\char`⟧}}\");\ndefineMacro(\"⟦\", \"\\\\llbracket\"); // blackboard bold [\ndefineMacro(\"⟧\", \"\\\\rrbracket\"); // blackboard bold ]\ndefineMacro(\"\\\\lBrace\", \"\\\\html@mathml{\" + \"\\\\mathopen{\\\\{\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`⦃}}\");\ndefineMacro(\"\\\\rBrace\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu\\\\}}}\" + \"{\\\\mathclose{\\\\char`⦄}}\");\ndefineMacro(\"⦃\", \"\\\\lBrace\"); // blackboard bold {\ndefineMacro(\"⦄\", \"\\\\rBrace\"); // blackboard bold }\n// TODO: Create variable sized versions of the last two items. I believe that\n// will require new font glyphs.\n// The stmaryrd function `\\minuso` provides a \"Plimsoll\" symbol that\n// superimposes the characters \\circ and \\mathminus. Used in chemistry.\ndefineMacro(\"\\\\minuso\", \"\\\\mathbin{\\\\html@mathml{\" + \"{\\\\mathrlap{\\\\mathchoice{\\\\kern{0.145em}}{\\\\kern{0.145em}}\" + \"{\\\\kern{0.1015em}}{\\\\kern{0.0725em}}\\\\circ}{-}}}\" + \"{\\\\char`⦵}}\");\ndefineMacro(\"⦵\", \"\\\\minuso\"); //////////////////////////////////////////////////////////////////////\n// texvc.sty\n// The texvc package contains macros available in mediawiki pages.\n// We omit the functions deprecated at\n// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax\n// We also omit texvc's \\O, which conflicts with \\text{\\O}\ndefineMacro(\"\\\\darr\", \"\\\\downarrow\");\ndefineMacro(\"\\\\dArr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\Darr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\lang\", \"\\\\langle\");\ndefineMacro(\"\\\\rang\", \"\\\\rangle\");\ndefineMacro(\"\\\\uarr\", \"\\\\uparrow\");\ndefineMacro(\"\\\\uArr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\Uarr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\N\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\R\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Z\", \"\\\\mathbb{Z}\");\ndefineMacro(\"\\\\alef\", \"\\\\aleph\");\ndefineMacro(\"\\\\alefsym\", \"\\\\aleph\");\ndefineMacro(\"\\\\Alpha\", \"\\\\mathrm{A}\");\ndefineMacro(\"\\\\Beta\", \"\\\\mathrm{B}\");\ndefineMacro(\"\\\\bull\", \"\\\\bullet\");\ndefineMacro(\"\\\\Chi\", \"\\\\mathrm{X}\");\ndefineMacro(\"\\\\clubs\", \"\\\\clubsuit\");\ndefineMacro(\"\\\\cnums\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Complex\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Dagger\", \"\\\\ddagger\");\ndefineMacro(\"\\\\diamonds\", \"\\\\diamondsuit\");\ndefineMacro(\"\\\\empty\", \"\\\\emptyset\");\ndefineMacro(\"\\\\Epsilon\", \"\\\\mathrm{E}\");\ndefineMacro(\"\\\\Eta\", \"\\\\mathrm{H}\");\ndefineMacro(\"\\\\exist\", \"\\\\exists\");\ndefineMacro(\"\\\\harr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\hArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Harr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\hearts\", \"\\\\heartsuit\");\ndefineMacro(\"\\\\image\", \"\\\\Im\");\ndefineMacro(\"\\\\infin\", \"\\\\infty\");\ndefineMacro(\"\\\\Iota\", \"\\\\mathrm{I}\");\ndefineMacro(\"\\\\isin\", \"\\\\in\");\ndefineMacro(\"\\\\Kappa\", \"\\\\mathrm{K}\");\ndefineMacro(\"\\\\larr\", \"\\\\leftarrow\");\ndefineMacro(\"\\\\lArr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\Larr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\lrarr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\lrArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Lrarr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Mu\", \"\\\\mathrm{M}\");\ndefineMacro(\"\\\\natnums\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\Nu\", \"\\\\mathrm{N}\");\ndefineMacro(\"\\\\Omicron\", \"\\\\mathrm{O}\");\ndefineMacro(\"\\\\plusmn\", \"\\\\pm\");\ndefineMacro(\"\\\\rarr\", \"\\\\rightarrow\");\ndefineMacro(\"\\\\rArr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\Rarr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\real\", \"\\\\Re\");\ndefineMacro(\"\\\\reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Rho\", \"\\\\mathrm{P}\");\ndefineMacro(\"\\\\sdot\", \"\\\\cdot\");\ndefineMacro(\"\\\\sect\", \"\\\\S\");\ndefineMacro(\"\\\\spades\", \"\\\\spadesuit\");\ndefineMacro(\"\\\\sub\", \"\\\\subset\");\ndefineMacro(\"\\\\sube\", \"\\\\subseteq\");\ndefineMacro(\"\\\\supe\", \"\\\\supseteq\");\ndefineMacro(\"\\\\Tau\", \"\\\\mathrm{T}\");\ndefineMacro(\"\\\\thetasym\", \"\\\\vartheta\"); // TODO: defineMacro(\"\\\\varcoppa\", \"\\\\\\mbox{\\\\coppa}\");\ndefineMacro(\"\\\\weierp\", \"\\\\wp\");\ndefineMacro(\"\\\\Zeta\", \"\\\\mathrm{Z}\"); //////////////////////////////////////////////////////////////////////\n// statmath.sty\n// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf\ndefineMacro(\"\\\\argmin\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,min}\");\ndefineMacro(\"\\\\argmax\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,max}\");\ndefineMacro(\"\\\\plim\", \"\\\\DOTSB\\\\mathop{\\\\operatorname{plim}}\\\\limits\"); //////////////////////////////////////////////////////////////////////\n// braket.sty\n// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf\ndefineMacro(\"\\\\bra\", \"\\\\mathinner{\\\\langle{#1}|}\");\ndefineMacro(\"\\\\ket\", \"\\\\mathinner{|{#1}\\\\rangle}\");\ndefineMacro(\"\\\\braket\", \"\\\\mathinner{\\\\langle{#1}\\\\rangle}\");\ndefineMacro(\"\\\\Bra\", \"\\\\left\\\\langle#1\\\\right|\");\ndefineMacro(\"\\\\Ket\", \"\\\\left|#1\\\\right\\\\rangle\");\nvar braketHelper = (one)=>(context)=>{\n        var left = context.consumeArg().tokens;\n        var middle = context.consumeArg().tokens;\n        var middleDouble = context.consumeArg().tokens;\n        var right = context.consumeArg().tokens;\n        var oldMiddle = context.macros.get(\"|\");\n        var oldMiddleDouble = context.macros.get(\"\\\\|\");\n        context.macros.beginGroup();\n        var midMacro = (double)=>(context)=>{\n                if (one) {\n                    // Only modify the first instance of | or \\|\n                    context.macros.set(\"|\", oldMiddle);\n                    if (middleDouble.length) {\n                        context.macros.set(\"\\\\|\", oldMiddleDouble);\n                    }\n                }\n                var doubled = double;\n                if (!double && middleDouble.length) {\n                    // Mimic \\@ifnextchar\n                    var nextToken = context.future();\n                    if (nextToken.text === \"|\") {\n                        context.popToken();\n                        doubled = true;\n                    }\n                }\n                return {\n                    tokens: doubled ? middleDouble : middle,\n                    numArgs: 0\n                };\n            };\n        context.macros.set(\"|\", midMacro(false));\n        if (middleDouble.length) {\n            context.macros.set(\"\\\\|\", midMacro(true));\n        }\n        var arg = context.consumeArg().tokens;\n        var expanded = context.expandTokens([\n            ...right,\n            ...arg,\n            ...left // reversed\n        ]);\n        context.macros.endGroup();\n        return {\n            tokens: expanded.reverse(),\n            numArgs: 0\n        };\n    };\ndefineMacro(\"\\\\bra@ket\", braketHelper(false));\ndefineMacro(\"\\\\bra@set\", braketHelper(true));\ndefineMacro(\"\\\\Braket\", \"\\\\bra@ket{\\\\left\\\\langle}\" + \"{\\\\,\\\\middle\\\\vert\\\\,}{\\\\,\\\\middle\\\\vert\\\\,}{\\\\right\\\\rangle}\");\ndefineMacro(\"\\\\Set\", \"\\\\bra@set{\\\\left\\\\{\\\\:}\" + \"{\\\\;\\\\middle\\\\vert\\\\;}{\\\\;\\\\middle\\\\Vert\\\\;}{\\\\:\\\\right\\\\}}\");\ndefineMacro(\"\\\\set\", \"\\\\bra@set{\\\\{\\\\,}{\\\\mid}{}{\\\\,\\\\}}\"); // has no support for special || or \\|\n//////////////////////////////////////////////////////////////////////\n// actuarialangle.dtx\ndefineMacro(\"\\\\angln\", \"{\\\\angl n}\"); // Custom Khan Academy colors, should be moved to an optional package\ndefineMacro(\"\\\\blue\", \"\\\\textcolor{##6495ed}{#1}\");\ndefineMacro(\"\\\\orange\", \"\\\\textcolor{##ffa500}{#1}\");\ndefineMacro(\"\\\\pink\", \"\\\\textcolor{##ff00af}{#1}\");\ndefineMacro(\"\\\\red\", \"\\\\textcolor{##df0030}{#1}\");\ndefineMacro(\"\\\\green\", \"\\\\textcolor{##28ae7b}{#1}\");\ndefineMacro(\"\\\\gray\", \"\\\\textcolor{gray}{#1}\");\ndefineMacro(\"\\\\purple\", \"\\\\textcolor{##9d38bd}{#1}\");\ndefineMacro(\"\\\\blueA\", \"\\\\textcolor{##ccfaff}{#1}\");\ndefineMacro(\"\\\\blueB\", \"\\\\textcolor{##80f6ff}{#1}\");\ndefineMacro(\"\\\\blueC\", \"\\\\textcolor{##63d9ea}{#1}\");\ndefineMacro(\"\\\\blueD\", \"\\\\textcolor{##11accd}{#1}\");\ndefineMacro(\"\\\\blueE\", \"\\\\textcolor{##0c7f99}{#1}\");\ndefineMacro(\"\\\\tealA\", \"\\\\textcolor{##94fff5}{#1}\");\ndefineMacro(\"\\\\tealB\", \"\\\\textcolor{##26edd5}{#1}\");\ndefineMacro(\"\\\\tealC\", \"\\\\textcolor{##01d1c1}{#1}\");\ndefineMacro(\"\\\\tealD\", \"\\\\textcolor{##01a995}{#1}\");\ndefineMacro(\"\\\\tealE\", \"\\\\textcolor{##208170}{#1}\");\ndefineMacro(\"\\\\greenA\", \"\\\\textcolor{##b6ffb0}{#1}\");\ndefineMacro(\"\\\\greenB\", \"\\\\textcolor{##8af281}{#1}\");\ndefineMacro(\"\\\\greenC\", \"\\\\textcolor{##74cf70}{#1}\");\ndefineMacro(\"\\\\greenD\", \"\\\\textcolor{##1fab54}{#1}\");\ndefineMacro(\"\\\\greenE\", \"\\\\textcolor{##0d923f}{#1}\");\ndefineMacro(\"\\\\goldA\", \"\\\\textcolor{##ffd0a9}{#1}\");\ndefineMacro(\"\\\\goldB\", \"\\\\textcolor{##ffbb71}{#1}\");\ndefineMacro(\"\\\\goldC\", \"\\\\textcolor{##ff9c39}{#1}\");\ndefineMacro(\"\\\\goldD\", \"\\\\textcolor{##e07d10}{#1}\");\ndefineMacro(\"\\\\goldE\", \"\\\\textcolor{##a75a05}{#1}\");\ndefineMacro(\"\\\\redA\", \"\\\\textcolor{##fca9a9}{#1}\");\ndefineMacro(\"\\\\redB\", \"\\\\textcolor{##ff8482}{#1}\");\ndefineMacro(\"\\\\redC\", \"\\\\textcolor{##f9685d}{#1}\");\ndefineMacro(\"\\\\redD\", \"\\\\textcolor{##e84d39}{#1}\");\ndefineMacro(\"\\\\redE\", \"\\\\textcolor{##bc2612}{#1}\");\ndefineMacro(\"\\\\maroonA\", \"\\\\textcolor{##ffbde0}{#1}\");\ndefineMacro(\"\\\\maroonB\", \"\\\\textcolor{##ff92c6}{#1}\");\ndefineMacro(\"\\\\maroonC\", \"\\\\textcolor{##ed5fa6}{#1}\");\ndefineMacro(\"\\\\maroonD\", \"\\\\textcolor{##ca337c}{#1}\");\ndefineMacro(\"\\\\maroonE\", \"\\\\textcolor{##9e034e}{#1}\");\ndefineMacro(\"\\\\purpleA\", \"\\\\textcolor{##ddd7ff}{#1}\");\ndefineMacro(\"\\\\purpleB\", \"\\\\textcolor{##c6b9fc}{#1}\");\ndefineMacro(\"\\\\purpleC\", \"\\\\textcolor{##aa87ff}{#1}\");\ndefineMacro(\"\\\\purpleD\", \"\\\\textcolor{##7854ab}{#1}\");\ndefineMacro(\"\\\\purpleE\", \"\\\\textcolor{##543b78}{#1}\");\ndefineMacro(\"\\\\mintA\", \"\\\\textcolor{##f5f9e8}{#1}\");\ndefineMacro(\"\\\\mintB\", \"\\\\textcolor{##edf2df}{#1}\");\ndefineMacro(\"\\\\mintC\", \"\\\\textcolor{##e0e5cc}{#1}\");\ndefineMacro(\"\\\\grayA\", \"\\\\textcolor{##f6f7f7}{#1}\");\ndefineMacro(\"\\\\grayB\", \"\\\\textcolor{##f0f1f2}{#1}\");\ndefineMacro(\"\\\\grayC\", \"\\\\textcolor{##e3e5e6}{#1}\");\ndefineMacro(\"\\\\grayD\", \"\\\\textcolor{##d6d8da}{#1}\");\ndefineMacro(\"\\\\grayE\", \"\\\\textcolor{##babec2}{#1}\");\ndefineMacro(\"\\\\grayF\", \"\\\\textcolor{##888d93}{#1}\");\ndefineMacro(\"\\\\grayG\", \"\\\\textcolor{##626569}{#1}\");\ndefineMacro(\"\\\\grayH\", \"\\\\textcolor{##3b3e40}{#1}\");\ndefineMacro(\"\\\\grayI\", \"\\\\textcolor{##21242c}{#1}\");\ndefineMacro(\"\\\\kaBlue\", \"\\\\textcolor{##314453}{#1}\");\ndefineMacro(\"\\\\kaGreen\", \"\\\\textcolor{##71B307}{#1}\");\n/**\n * This file contains the “gullet” where macros are expanded\n * until only non-macro tokens remain.\n */ // List of commands that act like macros but aren't defined as a macro,\n// function, or symbol.  Used in `isDefined`.\nvar implicitCommands = {\n    \"^\": true,\n    // Parser.js\n    \"_\": true,\n    // Parser.js\n    \"\\\\limits\": true,\n    // Parser.js\n    \"\\\\nolimits\": true // Parser.js\n};\nclass MacroExpander {\n    constructor(input, settings, mode){\n        this.settings = void 0;\n        this.expansionCount = void 0;\n        this.lexer = void 0;\n        this.macros = void 0;\n        this.stack = void 0;\n        this.mode = void 0;\n        this.settings = settings;\n        this.expansionCount = 0;\n        this.feed(input); // Make new global namespace\n        this.macros = new Namespace(macros, settings.macros);\n        this.mode = mode;\n        this.stack = []; // contains tokens in REVERSE order\n    }\n    /**\n   * Feed a new input string to the same MacroExpander\n   * (with existing macros etc.).\n   */ feed(input) {\n        this.lexer = new Lexer(input, this.settings);\n    }\n    /**\n   * Switches between \"text\" and \"math\" modes.\n   */ switchMode(newMode) {\n        this.mode = newMode;\n    }\n    /**\n   * Start a new group nesting within all namespaces.\n   */ beginGroup() {\n        this.macros.beginGroup();\n    }\n    /**\n   * End current group nesting within all namespaces.\n   */ endGroup() {\n        this.macros.endGroup();\n    }\n    /**\n   * Ends all currently nested groups (if any), restoring values before the\n   * groups began.  Useful in case of an error in the middle of parsing.\n   */ endGroups() {\n        this.macros.endGroups();\n    }\n    /**\n   * Returns the topmost token on the stack, without expanding it.\n   * Similar in behavior to TeX's `\\futurelet`.\n   */ future() {\n        if (this.stack.length === 0) {\n            this.pushToken(this.lexer.lex());\n        }\n        return this.stack[this.stack.length - 1];\n    }\n    /**\n   * Remove and return the next unexpanded token.\n   */ popToken() {\n        this.future(); // ensure non-empty stack\n        return this.stack.pop();\n    }\n    /**\n   * Add a given token to the token stack.  In particular, this get be used\n   * to put back a token returned from one of the other methods.\n   */ pushToken(token) {\n        this.stack.push(token);\n    }\n    /**\n   * Append an array of tokens to the token stack.\n   */ pushTokens(tokens) {\n        this.stack.push(...tokens);\n    }\n    /**\n   * Find an macro argument without expanding tokens and append the array of\n   * tokens to the token stack. Uses Token as a container for the result.\n   */ scanArgument(isOptional) {\n        var start;\n        var end;\n        var tokens;\n        if (isOptional) {\n            this.consumeSpaces(); // \\@ifnextchar gobbles any space following it\n            if (this.future().text !== \"[\") {\n                return null;\n            }\n            start = this.popToken(); // don't include [ in tokens\n            ({ tokens, end } = this.consumeArg([\n                \"]\"\n            ]));\n        } else {\n            ({ tokens, start, end } = this.consumeArg());\n        } // indicate the end of an argument\n        this.pushToken(new Token(\"EOF\", end.loc));\n        this.pushTokens(tokens);\n        return start.range(end, \"\");\n    }\n    /**\n   * Consume all following space tokens, without expansion.\n   */ consumeSpaces() {\n        for(;;){\n            var token = this.future();\n            if (token.text === \" \") {\n                this.stack.pop();\n            } else {\n                break;\n            }\n        }\n    }\n    /**\n   * Consume an argument from the token stream, and return the resulting array\n   * of tokens and start/end token.\n   */ consumeArg(delims) {\n        // The argument for a delimited parameter is the shortest (possibly\n        // empty) sequence of tokens with properly nested {...} groups that is\n        // followed ... by this particular list of non-parameter tokens.\n        // The argument for an undelimited parameter is the next nonblank\n        // token, unless that token is ‘{’, when the argument will be the\n        // entire {...} group that follows.\n        var tokens = [];\n        var isDelimited = delims && delims.length > 0;\n        if (!isDelimited) {\n            // Ignore spaces between arguments.  As the TeXbook says:\n            // \"After you have said ‘\\def\\row#1#2{...}’, you are allowed to\n            //  put spaces between the arguments (e.g., ‘\\row x n’), because\n            //  TeX doesn’t use single spaces as undelimited arguments.\"\n            this.consumeSpaces();\n        }\n        var start = this.future();\n        var tok;\n        var depth = 0;\n        var match = 0;\n        do {\n            tok = this.popToken();\n            tokens.push(tok);\n            if (tok.text === \"{\") {\n                ++depth;\n            } else if (tok.text === \"}\") {\n                --depth;\n                if (depth === -1) {\n                    throw new ParseError(\"Extra }\", tok);\n                }\n            } else if (tok.text === \"EOF\") {\n                throw new ParseError(\"Unexpected end of input in a macro argument\" + \", expected '\" + (delims && isDelimited ? delims[match] : \"}\") + \"'\", tok);\n            }\n            if (delims && isDelimited) {\n                if ((depth === 0 || depth === 1 && delims[match] === \"{\") && tok.text === delims[match]) {\n                    ++match;\n                    if (match === delims.length) {\n                        // don't include delims in tokens\n                        tokens.splice(-match, match);\n                        break;\n                    }\n                } else {\n                    match = 0;\n                }\n            }\n        }while (depth !== 0 || isDelimited); // If the argument found ... has the form ‘{<nested tokens>}’,\n        // ... the outermost braces enclosing the argument are removed\n        if (start.text === \"{\" && tokens[tokens.length - 1].text === \"}\") {\n            tokens.pop();\n            tokens.shift();\n        }\n        tokens.reverse(); // to fit in with stack order\n        return {\n            tokens,\n            start,\n            end: tok\n        };\n    }\n    /**\n   * Consume the specified number of (delimited) arguments from the token\n   * stream and return the resulting array of arguments.\n   */ consumeArgs(numArgs, delimiters) {\n        if (delimiters) {\n            if (delimiters.length !== numArgs + 1) {\n                throw new ParseError(\"The length of delimiters doesn't match the number of args!\");\n            }\n            var delims = delimiters[0];\n            for(var i = 0; i < delims.length; i++){\n                var tok = this.popToken();\n                if (delims[i] !== tok.text) {\n                    throw new ParseError(\"Use of the macro doesn't match its definition\", tok);\n                }\n            }\n        }\n        var args = [];\n        for(var _i = 0; _i < numArgs; _i++){\n            args.push(this.consumeArg(delimiters && delimiters[_i + 1]).tokens);\n        }\n        return args;\n    }\n    /**\n   * Expand the next token only once if possible.\n   *\n   * If the token is expanded, the resulting tokens will be pushed onto\n   * the stack in reverse order, and the number of such tokens will be\n   * returned.  This number might be zero or positive.\n   *\n   * If not, the return value is `false`, and the next token remains at the\n   * top of the stack.\n   *\n   * In either case, the next token will be on the top of the stack,\n   * or the stack will be empty (in case of empty expansion\n   * and no other tokens).\n   *\n   * Used to implement `expandAfterFuture` and `expandNextToken`.\n   *\n   * If expandableOnly, only expandable tokens are expanded and\n   * an undefined control sequence results in an error.\n   */ expandOnce(expandableOnly) {\n        var topToken = this.popToken();\n        var name = topToken.text;\n        var expansion = !topToken.noexpand ? this._getExpansion(name) : null;\n        if (expansion == null || expandableOnly && expansion.unexpandable) {\n            if (expandableOnly && expansion == null && name[0] === \"\\\\\" && !this.isDefined(name)) {\n                throw new ParseError(\"Undefined control sequence: \" + name);\n            }\n            this.pushToken(topToken);\n            return false;\n        }\n        this.expansionCount++;\n        if (this.expansionCount > this.settings.maxExpand) {\n            throw new ParseError(\"Too many expansions: infinite loop or \" + \"need to increase maxExpand setting\");\n        }\n        var tokens = expansion.tokens;\n        var args = this.consumeArgs(expansion.numArgs, expansion.delimiters);\n        if (expansion.numArgs) {\n            // paste arguments in place of the placeholders\n            tokens = tokens.slice(); // make a shallow copy\n            for(var i = tokens.length - 1; i >= 0; --i){\n                var tok = tokens[i];\n                if (tok.text === \"#\") {\n                    if (i === 0) {\n                        throw new ParseError(\"Incomplete placeholder at end of macro body\", tok);\n                    }\n                    tok = tokens[--i]; // next token on stack\n                    if (tok.text === \"#\") {\n                        // ## → #\n                        tokens.splice(i + 1, 1); // drop first #\n                    } else if (/^[1-9]$/.test(tok.text)) {\n                        // replace the placeholder with the indicated argument\n                        tokens.splice(i, 2, ...args[+tok.text - 1]);\n                    } else {\n                        throw new ParseError(\"Not a valid argument number\", tok);\n                    }\n                }\n            }\n        } // Concatenate expansion onto top of stack.\n        this.pushTokens(tokens);\n        return tokens.length;\n    }\n    /**\n   * Expand the next token only once (if possible), and return the resulting\n   * top token on the stack (without removing anything from the stack).\n   * Similar in behavior to TeX's `\\expandafter\\futurelet`.\n   * Equivalent to expandOnce() followed by future().\n   */ expandAfterFuture() {\n        this.expandOnce();\n        return this.future();\n    }\n    /**\n   * Recursively expand first token, then return first non-expandable token.\n   */ expandNextToken() {\n        for(;;){\n            if (this.expandOnce() === false) {\n                // fully expanded\n                var token = this.stack.pop(); // the token after \\noexpand is interpreted as if its meaning\n                // were ‘\\relax’\n                if (token.treatAsRelax) {\n                    token.text = \"\\\\relax\";\n                }\n                return token;\n            }\n        } // Flow unable to figure out that this pathway is impossible.\n        // https://github.com/facebook/flow/issues/4808\n        throw new Error(); // eslint-disable-line no-unreachable\n    }\n    /**\n   * Fully expand the given macro name and return the resulting list of\n   * tokens, or return `undefined` if no such macro is defined.\n   */ expandMacro(name) {\n        return this.macros.has(name) ? this.expandTokens([\n            new Token(name)\n        ]) : undefined;\n    }\n    /**\n   * Fully expand the given token stream and return the resulting list of\n   * tokens.  Note that the input tokens are in reverse order, but the\n   * output tokens are in forward order.\n   */ expandTokens(tokens) {\n        var output = [];\n        var oldStackLength = this.stack.length;\n        this.pushTokens(tokens);\n        while(this.stack.length > oldStackLength){\n            // Expand only expandable tokens\n            if (this.expandOnce(true) === false) {\n                // fully expanded\n                var token = this.stack.pop();\n                if (token.treatAsRelax) {\n                    // the expansion of \\noexpand is the token itself\n                    token.noexpand = false;\n                    token.treatAsRelax = false;\n                }\n                output.push(token);\n            }\n        }\n        return output;\n    }\n    /**\n   * Fully expand the given macro name and return the result as a string,\n   * or return `undefined` if no such macro is defined.\n   */ expandMacroAsText(name) {\n        var tokens = this.expandMacro(name);\n        if (tokens) {\n            return tokens.map((token)=>token.text).join(\"\");\n        } else {\n            return tokens;\n        }\n    }\n    /**\n   * Returns the expanded macro as a reversed array of tokens and a macro\n   * argument count.  Or returns `null` if no such macro.\n   */ _getExpansion(name) {\n        var definition = this.macros.get(name);\n        if (definition == null) {\n            // mainly checking for undefined here\n            return definition;\n        } // If a single character has an associated catcode other than 13\n        // (active character), then don't expand it.\n        if (name.length === 1) {\n            var catcode = this.lexer.catcodes[name];\n            if (catcode != null && catcode !== 13) {\n                return;\n            }\n        }\n        var expansion = typeof definition === \"function\" ? definition(this) : definition;\n        if (typeof expansion === \"string\") {\n            var numArgs = 0;\n            if (expansion.indexOf(\"#\") !== -1) {\n                var stripped = expansion.replace(/##/g, \"\");\n                while(stripped.indexOf(\"#\" + (numArgs + 1)) !== -1){\n                    ++numArgs;\n                }\n            }\n            var bodyLexer = new Lexer(expansion, this.settings);\n            var tokens = [];\n            var tok = bodyLexer.lex();\n            while(tok.text !== \"EOF\"){\n                tokens.push(tok);\n                tok = bodyLexer.lex();\n            }\n            tokens.reverse(); // to fit in with stack using push and pop\n            var expanded = {\n                tokens,\n                numArgs\n            };\n            return expanded;\n        }\n        return expansion;\n    }\n    /**\n   * Determine whether a command is currently \"defined\" (has some\n   * functionality), meaning that it's a macro (in the current group),\n   * a function, a symbol, or one of the special commands listed in\n   * `implicitCommands`.\n   */ isDefined(name) {\n        return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name);\n    }\n    /**\n   * Determine whether a command is expandable.\n   */ isExpandable(name) {\n        var macro = this.macros.get(name);\n        return macro != null ? typeof macro === \"string\" || typeof macro === \"function\" || !macro.unexpandable : functions.hasOwnProperty(name) && !functions[name].primitive;\n    }\n}\n// Helpers for Parser.js handling of Unicode (sub|super)script characters.\nvar unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/;\nvar uSubsAndSups = Object.freeze({\n    \"₊\": \"+\",\n    \"₋\": \"-\",\n    \"₌\": \"=\",\n    \"₍\": \"(\",\n    \"₎\": \")\",\n    \"₀\": \"0\",\n    \"₁\": \"1\",\n    \"₂\": \"2\",\n    \"₃\": \"3\",\n    \"₄\": \"4\",\n    \"₅\": \"5\",\n    \"₆\": \"6\",\n    \"₇\": \"7\",\n    \"₈\": \"8\",\n    \"₉\": \"9\",\n    \"ₐ\": \"a\",\n    \"ₑ\": \"e\",\n    \"ₕ\": \"h\",\n    \"ᵢ\": \"i\",\n    \"ⱼ\": \"j\",\n    \"ₖ\": \"k\",\n    \"ₗ\": \"l\",\n    \"ₘ\": \"m\",\n    \"ₙ\": \"n\",\n    \"ₒ\": \"o\",\n    \"ₚ\": \"p\",\n    \"ᵣ\": \"r\",\n    \"ₛ\": \"s\",\n    \"ₜ\": \"t\",\n    \"ᵤ\": \"u\",\n    \"ᵥ\": \"v\",\n    \"ₓ\": \"x\",\n    \"ᵦ\": \"β\",\n    \"ᵧ\": \"γ\",\n    \"ᵨ\": \"ρ\",\n    \"ᵩ\": \"ϕ\",\n    \"ᵪ\": \"χ\",\n    \"⁺\": \"+\",\n    \"⁻\": \"-\",\n    \"⁼\": \"=\",\n    \"⁽\": \"(\",\n    \"⁾\": \")\",\n    \"⁰\": \"0\",\n    \"\\xb9\": \"1\",\n    \"\\xb2\": \"2\",\n    \"\\xb3\": \"3\",\n    \"⁴\": \"4\",\n    \"⁵\": \"5\",\n    \"⁶\": \"6\",\n    \"⁷\": \"7\",\n    \"⁸\": \"8\",\n    \"⁹\": \"9\",\n    \"ᴬ\": \"A\",\n    \"ᴮ\": \"B\",\n    \"ᴰ\": \"D\",\n    \"ᴱ\": \"E\",\n    \"ᴳ\": \"G\",\n    \"ᴴ\": \"H\",\n    \"ᴵ\": \"I\",\n    \"ᴶ\": \"J\",\n    \"ᴷ\": \"K\",\n    \"ᴸ\": \"L\",\n    \"ᴹ\": \"M\",\n    \"ᴺ\": \"N\",\n    \"ᴼ\": \"O\",\n    \"ᴾ\": \"P\",\n    \"ᴿ\": \"R\",\n    \"ᵀ\": \"T\",\n    \"ᵁ\": \"U\",\n    \"ⱽ\": \"V\",\n    \"ᵂ\": \"W\",\n    \"ᵃ\": \"a\",\n    \"ᵇ\": \"b\",\n    \"ᶜ\": \"c\",\n    \"ᵈ\": \"d\",\n    \"ᵉ\": \"e\",\n    \"ᶠ\": \"f\",\n    \"ᵍ\": \"g\",\n    \"ʰ\": \"h\",\n    \"ⁱ\": \"i\",\n    \"ʲ\": \"j\",\n    \"ᵏ\": \"k\",\n    \"ˡ\": \"l\",\n    \"ᵐ\": \"m\",\n    \"ⁿ\": \"n\",\n    \"ᵒ\": \"o\",\n    \"ᵖ\": \"p\",\n    \"ʳ\": \"r\",\n    \"ˢ\": \"s\",\n    \"ᵗ\": \"t\",\n    \"ᵘ\": \"u\",\n    \"ᵛ\": \"v\",\n    \"ʷ\": \"w\",\n    \"ˣ\": \"x\",\n    \"ʸ\": \"y\",\n    \"ᶻ\": \"z\",\n    \"ᵝ\": \"β\",\n    \"ᵞ\": \"γ\",\n    \"ᵟ\": \"δ\",\n    \"ᵠ\": \"ϕ\",\n    \"ᵡ\": \"χ\",\n    \"ᶿ\": \"θ\"\n});\n/* eslint no-constant-condition:0 */ var unicodeAccents = {\n    \"́\": {\n        \"text\": \"\\\\'\",\n        \"math\": \"\\\\acute\"\n    },\n    \"̀\": {\n        \"text\": \"\\\\`\",\n        \"math\": \"\\\\grave\"\n    },\n    \"̈\": {\n        \"text\": '\\\\\"',\n        \"math\": \"\\\\ddot\"\n    },\n    \"̃\": {\n        \"text\": \"\\\\~\",\n        \"math\": \"\\\\tilde\"\n    },\n    \"̄\": {\n        \"text\": \"\\\\=\",\n        \"math\": \"\\\\bar\"\n    },\n    \"̆\": {\n        \"text\": \"\\\\u\",\n        \"math\": \"\\\\breve\"\n    },\n    \"̌\": {\n        \"text\": \"\\\\v\",\n        \"math\": \"\\\\check\"\n    },\n    \"̂\": {\n        \"text\": \"\\\\^\",\n        \"math\": \"\\\\hat\"\n    },\n    \"̇\": {\n        \"text\": \"\\\\.\",\n        \"math\": \"\\\\dot\"\n    },\n    \"̊\": {\n        \"text\": \"\\\\r\",\n        \"math\": \"\\\\mathring\"\n    },\n    \"̋\": {\n        \"text\": \"\\\\H\"\n    },\n    \"̧\": {\n        \"text\": \"\\\\c\"\n    }\n};\nvar unicodeSymbols = {\n    \"\\xe1\": \"á\",\n    \"\\xe0\": \"à\",\n    \"\\xe4\": \"ä\",\n    \"ǟ\": \"ǟ\",\n    \"\\xe3\": \"ã\",\n    \"ā\": \"ā\",\n    \"ă\": \"ă\",\n    \"ắ\": \"ắ\",\n    \"ằ\": \"ằ\",\n    \"ẵ\": \"ẵ\",\n    \"ǎ\": \"ǎ\",\n    \"\\xe2\": \"â\",\n    \"ấ\": \"ấ\",\n    \"ầ\": \"ầ\",\n    \"ẫ\": \"ẫ\",\n    \"ȧ\": \"ȧ\",\n    \"ǡ\": \"ǡ\",\n    \"\\xe5\": \"å\",\n    \"ǻ\": \"ǻ\",\n    \"ḃ\": \"ḃ\",\n    \"ć\": \"ć\",\n    \"ḉ\": \"ḉ\",\n    \"č\": \"č\",\n    \"ĉ\": \"ĉ\",\n    \"ċ\": \"ċ\",\n    \"\\xe7\": \"ç\",\n    \"ď\": \"ď\",\n    \"ḋ\": \"ḋ\",\n    \"ḑ\": \"ḑ\",\n    \"\\xe9\": \"é\",\n    \"\\xe8\": \"è\",\n    \"\\xeb\": \"ë\",\n    \"ẽ\": \"ẽ\",\n    \"ē\": \"ē\",\n    \"ḗ\": \"ḗ\",\n    \"ḕ\": \"ḕ\",\n    \"ĕ\": \"ĕ\",\n    \"ḝ\": \"ḝ\",\n    \"ě\": \"ě\",\n    \"\\xea\": \"ê\",\n    \"ế\": \"ế\",\n    \"ề\": \"ề\",\n    \"ễ\": \"ễ\",\n    \"ė\": \"ė\",\n    \"ȩ\": \"ȩ\",\n    \"ḟ\": \"ḟ\",\n    \"ǵ\": \"ǵ\",\n    \"ḡ\": \"ḡ\",\n    \"ğ\": \"ğ\",\n    \"ǧ\": \"ǧ\",\n    \"ĝ\": \"ĝ\",\n    \"ġ\": \"ġ\",\n    \"ģ\": \"ģ\",\n    \"ḧ\": \"ḧ\",\n    \"ȟ\": \"ȟ\",\n    \"ĥ\": \"ĥ\",\n    \"ḣ\": \"ḣ\",\n    \"ḩ\": \"ḩ\",\n    \"\\xed\": \"í\",\n    \"\\xec\": \"ì\",\n    \"\\xef\": \"ï\",\n    \"ḯ\": \"ḯ\",\n    \"ĩ\": \"ĩ\",\n    \"ī\": \"ī\",\n    \"ĭ\": \"ĭ\",\n    \"ǐ\": \"ǐ\",\n    \"\\xee\": \"î\",\n    \"ǰ\": \"ǰ\",\n    \"ĵ\": \"ĵ\",\n    \"ḱ\": \"ḱ\",\n    \"ǩ\": \"ǩ\",\n    \"ķ\": \"ķ\",\n    \"ĺ\": \"ĺ\",\n    \"ľ\": \"ľ\",\n    \"ļ\": \"ļ\",\n    \"ḿ\": \"ḿ\",\n    \"ṁ\": \"ṁ\",\n    \"ń\": \"ń\",\n    \"ǹ\": \"ǹ\",\n    \"\\xf1\": \"ñ\",\n    \"ň\": \"ň\",\n    \"ṅ\": \"ṅ\",\n    \"ņ\": \"ņ\",\n    \"\\xf3\": \"ó\",\n    \"\\xf2\": \"ò\",\n    \"\\xf6\": \"ö\",\n    \"ȫ\": \"ȫ\",\n    \"\\xf5\": \"õ\",\n    \"ṍ\": \"ṍ\",\n    \"ṏ\": \"ṏ\",\n    \"ȭ\": \"ȭ\",\n    \"ō\": \"ō\",\n    \"ṓ\": \"ṓ\",\n    \"ṑ\": \"ṑ\",\n    \"ŏ\": \"ŏ\",\n    \"ǒ\": \"ǒ\",\n    \"\\xf4\": \"ô\",\n    \"ố\": \"ố\",\n    \"ồ\": \"ồ\",\n    \"ỗ\": \"ỗ\",\n    \"ȯ\": \"ȯ\",\n    \"ȱ\": \"ȱ\",\n    \"ő\": \"ő\",\n    \"ṕ\": \"ṕ\",\n    \"ṗ\": \"ṗ\",\n    \"ŕ\": \"ŕ\",\n    \"ř\": \"ř\",\n    \"ṙ\": \"ṙ\",\n    \"ŗ\": \"ŗ\",\n    \"ś\": \"ś\",\n    \"ṥ\": \"ṥ\",\n    \"š\": \"š\",\n    \"ṧ\": \"ṧ\",\n    \"ŝ\": \"ŝ\",\n    \"ṡ\": \"ṡ\",\n    \"ş\": \"ş\",\n    \"ẗ\": \"ẗ\",\n    \"ť\": \"ť\",\n    \"ṫ\": \"ṫ\",\n    \"ţ\": \"ţ\",\n    \"\\xfa\": \"ú\",\n    \"\\xf9\": \"ù\",\n    \"\\xfc\": \"ü\",\n    \"ǘ\": \"ǘ\",\n    \"ǜ\": \"ǜ\",\n    \"ǖ\": \"ǖ\",\n    \"ǚ\": \"ǚ\",\n    \"ũ\": \"ũ\",\n    \"ṹ\": \"ṹ\",\n    \"ū\": \"ū\",\n    \"ṻ\": \"ṻ\",\n    \"ŭ\": \"ŭ\",\n    \"ǔ\": \"ǔ\",\n    \"\\xfb\": \"û\",\n    \"ů\": \"ů\",\n    \"ű\": \"ű\",\n    \"ṽ\": \"ṽ\",\n    \"ẃ\": \"ẃ\",\n    \"ẁ\": \"ẁ\",\n    \"ẅ\": \"ẅ\",\n    \"ŵ\": \"ŵ\",\n    \"ẇ\": \"ẇ\",\n    \"ẘ\": \"ẘ\",\n    \"ẍ\": \"ẍ\",\n    \"ẋ\": \"ẋ\",\n    \"\\xfd\": \"ý\",\n    \"ỳ\": \"ỳ\",\n    \"\\xff\": \"ÿ\",\n    \"ỹ\": \"ỹ\",\n    \"ȳ\": \"ȳ\",\n    \"ŷ\": \"ŷ\",\n    \"ẏ\": \"ẏ\",\n    \"ẙ\": \"ẙ\",\n    \"ź\": \"ź\",\n    \"ž\": \"ž\",\n    \"ẑ\": \"ẑ\",\n    \"ż\": \"ż\",\n    \"\\xc1\": \"Á\",\n    \"\\xc0\": \"À\",\n    \"\\xc4\": \"Ä\",\n    \"Ǟ\": \"Ǟ\",\n    \"\\xc3\": \"Ã\",\n    \"Ā\": \"Ā\",\n    \"Ă\": \"Ă\",\n    \"Ắ\": \"Ắ\",\n    \"Ằ\": \"Ằ\",\n    \"Ẵ\": \"Ẵ\",\n    \"Ǎ\": \"Ǎ\",\n    \"\\xc2\": \"Â\",\n    \"Ấ\": \"Ấ\",\n    \"Ầ\": \"Ầ\",\n    \"Ẫ\": \"Ẫ\",\n    \"Ȧ\": \"Ȧ\",\n    \"Ǡ\": \"Ǡ\",\n    \"\\xc5\": \"Å\",\n    \"Ǻ\": \"Ǻ\",\n    \"Ḃ\": \"Ḃ\",\n    \"Ć\": \"Ć\",\n    \"Ḉ\": \"Ḉ\",\n    \"Č\": \"Č\",\n    \"Ĉ\": \"Ĉ\",\n    \"Ċ\": \"Ċ\",\n    \"\\xc7\": \"Ç\",\n    \"Ď\": \"Ď\",\n    \"Ḋ\": \"Ḋ\",\n    \"Ḑ\": \"Ḑ\",\n    \"\\xc9\": \"É\",\n    \"\\xc8\": \"È\",\n    \"\\xcb\": \"Ë\",\n    \"Ẽ\": \"Ẽ\",\n    \"Ē\": \"Ē\",\n    \"Ḗ\": \"Ḗ\",\n    \"Ḕ\": \"Ḕ\",\n    \"Ĕ\": \"Ĕ\",\n    \"Ḝ\": \"Ḝ\",\n    \"Ě\": \"Ě\",\n    \"\\xca\": \"Ê\",\n    \"Ế\": \"Ế\",\n    \"Ề\": \"Ề\",\n    \"Ễ\": \"Ễ\",\n    \"Ė\": \"Ė\",\n    \"Ȩ\": \"Ȩ\",\n    \"Ḟ\": \"Ḟ\",\n    \"Ǵ\": \"Ǵ\",\n    \"Ḡ\": \"Ḡ\",\n    \"Ğ\": \"Ğ\",\n    \"Ǧ\": \"Ǧ\",\n    \"Ĝ\": \"Ĝ\",\n    \"Ġ\": \"Ġ\",\n    \"Ģ\": \"Ģ\",\n    \"Ḧ\": \"Ḧ\",\n    \"Ȟ\": \"Ȟ\",\n    \"Ĥ\": \"Ĥ\",\n    \"Ḣ\": \"Ḣ\",\n    \"Ḩ\": \"Ḩ\",\n    \"\\xcd\": \"Í\",\n    \"\\xcc\": \"Ì\",\n    \"\\xcf\": \"Ï\",\n    \"Ḯ\": \"Ḯ\",\n    \"Ĩ\": \"Ĩ\",\n    \"Ī\": \"Ī\",\n    \"Ĭ\": \"Ĭ\",\n    \"Ǐ\": \"Ǐ\",\n    \"\\xce\": \"Î\",\n    \"İ\": \"İ\",\n    \"Ĵ\": \"Ĵ\",\n    \"Ḱ\": \"Ḱ\",\n    \"Ǩ\": \"Ǩ\",\n    \"Ķ\": \"Ķ\",\n    \"Ĺ\": \"Ĺ\",\n    \"Ľ\": \"Ľ\",\n    \"Ļ\": \"Ļ\",\n    \"Ḿ\": \"Ḿ\",\n    \"Ṁ\": \"Ṁ\",\n    \"Ń\": \"Ń\",\n    \"Ǹ\": \"Ǹ\",\n    \"\\xd1\": \"Ñ\",\n    \"Ň\": \"Ň\",\n    \"Ṅ\": \"Ṅ\",\n    \"Ņ\": \"Ņ\",\n    \"\\xd3\": \"Ó\",\n    \"\\xd2\": \"Ò\",\n    \"\\xd6\": \"Ö\",\n    \"Ȫ\": \"Ȫ\",\n    \"\\xd5\": \"Õ\",\n    \"Ṍ\": \"Ṍ\",\n    \"Ṏ\": \"Ṏ\",\n    \"Ȭ\": \"Ȭ\",\n    \"Ō\": \"Ō\",\n    \"Ṓ\": \"Ṓ\",\n    \"Ṑ\": \"Ṑ\",\n    \"Ŏ\": \"Ŏ\",\n    \"Ǒ\": \"Ǒ\",\n    \"\\xd4\": \"Ô\",\n    \"Ố\": \"Ố\",\n    \"Ồ\": \"Ồ\",\n    \"Ỗ\": \"Ỗ\",\n    \"Ȯ\": \"Ȯ\",\n    \"Ȱ\": \"Ȱ\",\n    \"Ő\": \"Ő\",\n    \"Ṕ\": \"Ṕ\",\n    \"Ṗ\": \"Ṗ\",\n    \"Ŕ\": \"Ŕ\",\n    \"Ř\": \"Ř\",\n    \"Ṙ\": \"Ṙ\",\n    \"Ŗ\": \"Ŗ\",\n    \"Ś\": \"Ś\",\n    \"Ṥ\": \"Ṥ\",\n    \"Š\": \"Š\",\n    \"Ṧ\": \"Ṧ\",\n    \"Ŝ\": \"Ŝ\",\n    \"Ṡ\": \"Ṡ\",\n    \"Ş\": \"Ş\",\n    \"Ť\": \"Ť\",\n    \"Ṫ\": \"Ṫ\",\n    \"Ţ\": \"Ţ\",\n    \"\\xda\": \"Ú\",\n    \"\\xd9\": \"Ù\",\n    \"\\xdc\": \"Ü\",\n    \"Ǘ\": \"Ǘ\",\n    \"Ǜ\": \"Ǜ\",\n    \"Ǖ\": \"Ǖ\",\n    \"Ǚ\": \"Ǚ\",\n    \"Ũ\": \"Ũ\",\n    \"Ṹ\": \"Ṹ\",\n    \"Ū\": \"Ū\",\n    \"Ṻ\": \"Ṻ\",\n    \"Ŭ\": \"Ŭ\",\n    \"Ǔ\": \"Ǔ\",\n    \"\\xdb\": \"Û\",\n    \"Ů\": \"Ů\",\n    \"Ű\": \"Ű\",\n    \"Ṽ\": \"Ṽ\",\n    \"Ẃ\": \"Ẃ\",\n    \"Ẁ\": \"Ẁ\",\n    \"Ẅ\": \"Ẅ\",\n    \"Ŵ\": \"Ŵ\",\n    \"Ẇ\": \"Ẇ\",\n    \"Ẍ\": \"Ẍ\",\n    \"Ẋ\": \"Ẋ\",\n    \"\\xdd\": \"Ý\",\n    \"Ỳ\": \"Ỳ\",\n    \"Ÿ\": \"Ÿ\",\n    \"Ỹ\": \"Ỹ\",\n    \"Ȳ\": \"Ȳ\",\n    \"Ŷ\": \"Ŷ\",\n    \"Ẏ\": \"Ẏ\",\n    \"Ź\": \"Ź\",\n    \"Ž\": \"Ž\",\n    \"Ẑ\": \"Ẑ\",\n    \"Ż\": \"Ż\",\n    \"ά\": \"ά\",\n    \"ὰ\": \"ὰ\",\n    \"ᾱ\": \"ᾱ\",\n    \"ᾰ\": \"ᾰ\",\n    \"έ\": \"έ\",\n    \"ὲ\": \"ὲ\",\n    \"ή\": \"ή\",\n    \"ὴ\": \"ὴ\",\n    \"ί\": \"ί\",\n    \"ὶ\": \"ὶ\",\n    \"ϊ\": \"ϊ\",\n    \"ΐ\": \"ΐ\",\n    \"ῒ\": \"ῒ\",\n    \"ῑ\": \"ῑ\",\n    \"ῐ\": \"ῐ\",\n    \"ό\": \"ό\",\n    \"ὸ\": \"ὸ\",\n    \"ύ\": \"ύ\",\n    \"ὺ\": \"ὺ\",\n    \"ϋ\": \"ϋ\",\n    \"ΰ\": \"ΰ\",\n    \"ῢ\": \"ῢ\",\n    \"ῡ\": \"ῡ\",\n    \"ῠ\": \"ῠ\",\n    \"ώ\": \"ώ\",\n    \"ὼ\": \"ὼ\",\n    \"Ύ\": \"Ύ\",\n    \"Ὺ\": \"Ὺ\",\n    \"Ϋ\": \"Ϋ\",\n    \"Ῡ\": \"Ῡ\",\n    \"Ῠ\": \"Ῠ\",\n    \"Ώ\": \"Ώ\",\n    \"Ὼ\": \"Ὼ\"\n};\n/**\n * This file contains the parser used to parse out a TeX expression from the\n * input. Since TeX isn't context-free, standard parsers don't work particularly\n * well.\n *\n * The strategy of this parser is as such:\n *\n * The main functions (the `.parse...` ones) take a position in the current\n * parse string to parse tokens from. The lexer (found in Lexer.js, stored at\n * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When\n * individual tokens are needed at a position, the lexer is called to pull out a\n * token, which is then used.\n *\n * The parser has a property called \"mode\" indicating the mode that\n * the parser is currently in. Currently it has to be one of \"math\" or\n * \"text\", which denotes whether the current environment is a math-y\n * one or a text-y one (e.g. inside \\text). Currently, this serves to\n * limit the functions which can be used in text mode.\n *\n * The main functions then return an object which contains the useful data that\n * was parsed at its given point, and a new position at the end of the parsed\n * data. The main functions can call each other and continue the parsing by\n * using the returned position as a new starting point.\n *\n * There are also extra `.handle...` functions, which pull out some reused\n * functionality into self-contained functions.\n *\n * The functions return ParseNodes.\n */ class Parser {\n    constructor(input, settings){\n        this.mode = void 0;\n        this.gullet = void 0;\n        this.settings = void 0;\n        this.leftrightDepth = void 0;\n        this.nextToken = void 0;\n        // Start in math mode\n        this.mode = \"math\"; // Create a new macro expander (gullet) and (indirectly via that) also a\n        // new lexer (mouth) for this parser (stomach, in the language of TeX)\n        this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing\n        this.settings = settings; // Count leftright depth (for \\middle errors)\n        this.leftrightDepth = 0;\n    }\n    /**\n   * Checks a result to make sure it has the right type, and throws an\n   * appropriate error otherwise.\n   */ expect(text, consume) {\n        if (consume === void 0) {\n            consume = true;\n        }\n        if (this.fetch().text !== text) {\n            throw new ParseError(\"Expected '\" + text + \"', got '\" + this.fetch().text + \"'\", this.fetch());\n        }\n        if (consume) {\n            this.consume();\n        }\n    }\n    /**\n   * Discards the current lookahead token, considering it consumed.\n   */ consume() {\n        this.nextToken = null;\n    }\n    /**\n   * Return the current lookahead token, or if there isn't one (at the\n   * beginning, or if the previous lookahead token was consume()d),\n   * fetch the next token as the new lookahead token and return it.\n   */ fetch() {\n        if (this.nextToken == null) {\n            this.nextToken = this.gullet.expandNextToken();\n        }\n        return this.nextToken;\n    }\n    /**\n   * Switches between \"text\" and \"math\" modes.\n   */ switchMode(newMode) {\n        this.mode = newMode;\n        this.gullet.switchMode(newMode);\n    }\n    /**\n   * Main parsing function, which parses an entire input.\n   */ parse() {\n        if (!this.settings.globalGroup) {\n            // Create a group namespace for the math expression.\n            // (LaTeX creates a new group for every $...$, $$...$$, \\[...\\].)\n            this.gullet.beginGroup();\n        } // Use old \\color behavior (same as LaTeX's \\textcolor) if requested.\n        // We do this within the group for the math expression, so it doesn't\n        // pollute settings.macros.\n        if (this.settings.colorIsTextColor) {\n            this.gullet.macros.set(\"\\\\color\", \"\\\\textcolor\");\n        }\n        try {\n            // Try to parse the input\n            var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end\n            this.expect(\"EOF\"); // End the group namespace for the expression\n            if (!this.settings.globalGroup) {\n                this.gullet.endGroup();\n            }\n            return parse; // Close any leftover groups in case of a parse error.\n        } finally{\n            this.gullet.endGroups();\n        }\n    }\n    /**\n   * Fully parse a separate sequence of tokens as a separate job.\n   * Tokens should be specified in reverse order, as in a MacroDefinition.\n   */ subparse(tokens) {\n        // Save the next token from the current job.\n        var oldToken = this.nextToken;\n        this.consume(); // Run the new job, terminating it with an excess '}'\n        this.gullet.pushToken(new Token(\"}\"));\n        this.gullet.pushTokens(tokens);\n        var parse = this.parseExpression(false);\n        this.expect(\"}\"); // Restore the next token from the current job.\n        this.nextToken = oldToken;\n        return parse;\n    }\n    /**\n   * Parses an \"expression\", which is a list of atoms.\n   *\n   * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This\n   *                 happens when functions have higher precedence han infix\n   *                 nodes in implicit parses.\n   *\n   * `breakOnTokenText`: The text of the token that the expression should end\n   *                     with, or `null` if something else should end the\n   *                     expression.\n   */ parseExpression(breakOnInfix, breakOnTokenText) {\n        var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either\n        // we reached the end, a }, or a \\right)\n        while(true){\n            // Ignore spaces in math mode\n            if (this.mode === \"math\") {\n                this.consumeSpaces();\n            }\n            var lex = this.fetch();\n            if (Parser.endOfExpression.indexOf(lex.text) !== -1) {\n                break;\n            }\n            if (breakOnTokenText && lex.text === breakOnTokenText) {\n                break;\n            }\n            if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) {\n                break;\n            }\n            var atom = this.parseAtom(breakOnTokenText);\n            if (!atom) {\n                break;\n            } else if (atom.type === \"internal\") {\n                continue;\n            }\n            body.push(atom);\n        }\n        if (this.mode === \"text\") {\n            this.formLigatures(body);\n        }\n        return this.handleInfixNodes(body);\n    }\n    /**\n   * Rewrites infix operators such as \\over with corresponding commands such\n   * as \\frac.\n   *\n   * There can only be one infix operator per group.  If there's more than one\n   * then the expression is ambiguous.  This can be resolved by adding {}.\n   */ handleInfixNodes(body) {\n        var overIndex = -1;\n        var funcName;\n        for(var i = 0; i < body.length; i++){\n            if (body[i].type === \"infix\") {\n                if (overIndex !== -1) {\n                    throw new ParseError(\"only one infix operator per group\", body[i].token);\n                }\n                overIndex = i;\n                funcName = body[i].replaceWith;\n            }\n        }\n        if (overIndex !== -1 && funcName) {\n            var numerNode;\n            var denomNode;\n            var numerBody = body.slice(0, overIndex);\n            var denomBody = body.slice(overIndex + 1);\n            if (numerBody.length === 1 && numerBody[0].type === \"ordgroup\") {\n                numerNode = numerBody[0];\n            } else {\n                numerNode = {\n                    type: \"ordgroup\",\n                    mode: this.mode,\n                    body: numerBody\n                };\n            }\n            if (denomBody.length === 1 && denomBody[0].type === \"ordgroup\") {\n                denomNode = denomBody[0];\n            } else {\n                denomNode = {\n                    type: \"ordgroup\",\n                    mode: this.mode,\n                    body: denomBody\n                };\n            }\n            var node;\n            if (funcName === \"\\\\\\\\abovefrac\") {\n                node = this.callFunction(funcName, [\n                    numerNode,\n                    body[overIndex],\n                    denomNode\n                ], []);\n            } else {\n                node = this.callFunction(funcName, [\n                    numerNode,\n                    denomNode\n                ], []);\n            }\n            return [\n                node\n            ];\n        } else {\n            return body;\n        }\n    }\n    /**\n   * Handle a subscript or superscript with nice errors.\n   */ handleSupSubscript(name // For error reporting.\n    ) {\n        var symbolToken = this.fetch();\n        var symbol = symbolToken.text;\n        this.consume();\n        this.consumeSpaces(); // ignore spaces before sup/subscript argument\n        var group = this.parseGroup(name);\n        if (!group) {\n            throw new ParseError(\"Expected group after '\" + symbol + \"'\", symbolToken);\n        }\n        return group;\n    }\n    /**\n   * Converts the textual input of an unsupported command into a text node\n   * contained within a color node whose color is determined by errorColor\n   */ formatUnsupportedCmd(text) {\n        var textordArray = [];\n        for(var i = 0; i < text.length; i++){\n            textordArray.push({\n                type: \"textord\",\n                mode: \"text\",\n                text: text[i]\n            });\n        }\n        var textNode = {\n            type: \"text\",\n            mode: this.mode,\n            body: textordArray\n        };\n        var colorNode = {\n            type: \"color\",\n            mode: this.mode,\n            color: this.settings.errorColor,\n            body: [\n                textNode\n            ]\n        };\n        return colorNode;\n    }\n    /**\n   * Parses a group with optional super/subscripts.\n   */ parseAtom(breakOnTokenText) {\n        // The body of an atom is an implicit group, so that things like\n        // \\left(x\\right)^2 work correctly.\n        var base = this.parseGroup(\"atom\", breakOnTokenText); // In text mode, we don't have superscripts or subscripts\n        if (this.mode === \"text\") {\n            return base;\n        } // Note that base may be empty (i.e. null) at this point.\n        var superscript;\n        var subscript;\n        while(true){\n            // Guaranteed in math mode, so eat any spaces first.\n            this.consumeSpaces(); // Lex the first token\n            var lex = this.fetch();\n            if (lex.text === \"\\\\limits\" || lex.text === \"\\\\nolimits\") {\n                // We got a limit control\n                if (base && base.type === \"op\") {\n                    var limits = lex.text === \"\\\\limits\";\n                    base.limits = limits;\n                    base.alwaysHandleSupSub = true;\n                } else if (base && base.type === \"operatorname\") {\n                    if (base.alwaysHandleSupSub) {\n                        base.limits = lex.text === \"\\\\limits\";\n                    }\n                } else {\n                    throw new ParseError(\"Limit controls must follow a math operator\", lex);\n                }\n                this.consume();\n            } else if (lex.text === \"^\") {\n                // We got a superscript start\n                if (superscript) {\n                    throw new ParseError(\"Double superscript\", lex);\n                }\n                superscript = this.handleSupSubscript(\"superscript\");\n            } else if (lex.text === \"_\") {\n                // We got a subscript start\n                if (subscript) {\n                    throw new ParseError(\"Double subscript\", lex);\n                }\n                subscript = this.handleSupSubscript(\"subscript\");\n            } else if (lex.text === \"'\") {\n                // We got a prime\n                if (superscript) {\n                    throw new ParseError(\"Double superscript\", lex);\n                }\n                var prime = {\n                    type: \"textord\",\n                    mode: this.mode,\n                    text: \"\\\\prime\"\n                }; // Many primes can be grouped together, so we handle this here\n                var primes = [\n                    prime\n                ];\n                this.consume(); // Keep lexing tokens until we get something that's not a prime\n                while(this.fetch().text === \"'\"){\n                    // For each one, add another prime to the list\n                    primes.push(prime);\n                    this.consume();\n                } // If there's a superscript following the primes, combine that\n                // superscript in with the primes.\n                if (this.fetch().text === \"^\") {\n                    primes.push(this.handleSupSubscript(\"superscript\"));\n                } // Put everything into an ordgroup as the superscript\n                superscript = {\n                    type: \"ordgroup\",\n                    mode: this.mode,\n                    body: primes\n                };\n            } else if (uSubsAndSups[lex.text]) {\n                // A Unicode subscript or superscript character.\n                // We treat these similarly to the unicode-math package.\n                // So we render a string of Unicode (sub|super)scripts the\n                // same as a (sub|super)script of regular characters.\n                var str = uSubsAndSups[lex.text];\n                var isSub = unicodeSubRegEx.test(lex.text);\n                this.consume(); // Continue fetching tokens to fill out the string.\n                while(true){\n                    var token = this.fetch().text;\n                    if (!uSubsAndSups[token]) {\n                        break;\n                    }\n                    if (unicodeSubRegEx.test(token) !== isSub) {\n                        break;\n                    }\n                    this.consume();\n                    str += uSubsAndSups[token];\n                } // Now create a (sub|super)script.\n                var body = new Parser(str, this.settings).parse();\n                if (isSub) {\n                    subscript = {\n                        type: \"ordgroup\",\n                        mode: \"math\",\n                        body\n                    };\n                } else {\n                    superscript = {\n                        type: \"ordgroup\",\n                        mode: \"math\",\n                        body\n                    };\n                }\n            } else {\n                break;\n            }\n        } // Base must be set if superscript or subscript are set per logic above,\n        // but need to check here for type check to pass.\n        if (superscript || subscript) {\n            // If we got either a superscript or subscript, create a supsub\n            return {\n                type: \"supsub\",\n                mode: this.mode,\n                base: base,\n                sup: superscript,\n                sub: subscript\n            };\n        } else {\n            // Otherwise return the original body\n            return base;\n        }\n    }\n    /**\n   * Parses an entire function, including its base and all of its arguments.\n   */ parseFunction(breakOnTokenText, name // For determining its context\n    ) {\n        var token = this.fetch();\n        var func = token.text;\n        var funcData = functions[func];\n        if (!funcData) {\n            return null;\n        }\n        this.consume(); // consume command token\n        if (name && name !== \"atom\" && !funcData.allowedInArgument) {\n            throw new ParseError(\"Got function '\" + func + \"' with no arguments\" + (name ? \" as \" + name : \"\"), token);\n        } else if (this.mode === \"text\" && !funcData.allowedInText) {\n            throw new ParseError(\"Can't use function '\" + func + \"' in text mode\", token);\n        } else if (this.mode === \"math\" && funcData.allowedInMath === false) {\n            throw new ParseError(\"Can't use function '\" + func + \"' in math mode\", token);\n        }\n        var { args, optArgs } = this.parseArguments(func, funcData);\n        return this.callFunction(func, args, optArgs, token, breakOnTokenText);\n    }\n    /**\n   * Call a function handler with a suitable context and arguments.\n   */ callFunction(name, args, optArgs, token, breakOnTokenText) {\n        var context = {\n            funcName: name,\n            parser: this,\n            token,\n            breakOnTokenText\n        };\n        var func = functions[name];\n        if (func && func.handler) {\n            return func.handler(context, args, optArgs);\n        } else {\n            throw new ParseError(\"No function handler for \" + name);\n        }\n    }\n    /**\n   * Parses the arguments of a function or environment\n   */ parseArguments(func, funcData) {\n        var totalArgs = funcData.numArgs + funcData.numOptionalArgs;\n        if (totalArgs === 0) {\n            return {\n                args: [],\n                optArgs: []\n            };\n        }\n        var args = [];\n        var optArgs = [];\n        for(var i = 0; i < totalArgs; i++){\n            var argType = funcData.argTypes && funcData.argTypes[i];\n            var isOptional = i < funcData.numOptionalArgs;\n            if (funcData.primitive && argType == null || // \\sqrt expands into primitive if optional argument doesn't exist\n            funcData.type === \"sqrt\" && i === 1 && optArgs[0] == null) {\n                argType = \"primitive\";\n            }\n            var arg = this.parseGroupOfType(\"argument to '\" + func + \"'\", argType, isOptional);\n            if (isOptional) {\n                optArgs.push(arg);\n            } else if (arg != null) {\n                args.push(arg);\n            } else {\n                // should be unreachable\n                throw new ParseError(\"Null argument, please report this as a bug\");\n            }\n        }\n        return {\n            args,\n            optArgs\n        };\n    }\n    /**\n   * Parses a group when the mode is changing.\n   */ parseGroupOfType(name, type, optional) {\n        switch(type){\n            case \"color\":\n                return this.parseColorGroup(optional);\n            case \"size\":\n                return this.parseSizeGroup(optional);\n            case \"url\":\n                return this.parseUrlGroup(optional);\n            case \"math\":\n            case \"text\":\n                return this.parseArgumentGroup(optional, type);\n            case \"hbox\":\n                {\n                    // hbox argument type wraps the argument in the equivalent of\n                    // \\hbox, which is like \\text but switching to \\textstyle size.\n                    var group = this.parseArgumentGroup(optional, \"text\");\n                    return group != null ? {\n                        type: \"styling\",\n                        mode: group.mode,\n                        body: [\n                            group\n                        ],\n                        style: \"text\" // simulate \\textstyle\n                    } : null;\n                }\n            case \"raw\":\n                {\n                    var token = this.parseStringGroup(\"raw\", optional);\n                    return token != null ? {\n                        type: \"raw\",\n                        mode: \"text\",\n                        string: token.text\n                    } : null;\n                }\n            case \"primitive\":\n                {\n                    if (optional) {\n                        throw new ParseError(\"A primitive argument cannot be optional\");\n                    }\n                    var _group = this.parseGroup(name);\n                    if (_group == null) {\n                        throw new ParseError(\"Expected group as \" + name, this.fetch());\n                    }\n                    return _group;\n                }\n            case \"original\":\n            case null:\n            case undefined:\n                return this.parseArgumentGroup(optional);\n            default:\n                throw new ParseError(\"Unknown group type as \" + name, this.fetch());\n        }\n    }\n    /**\n   * Discard any space tokens, fetching the next non-space token.\n   */ consumeSpaces() {\n        while(this.fetch().text === \" \"){\n            this.consume();\n        }\n    }\n    /**\n   * Parses a group, essentially returning the string formed by the\n   * brace-enclosed tokens plus some position information.\n   */ parseStringGroup(modeName, optional) {\n        var argToken = this.gullet.scanArgument(optional);\n        if (argToken == null) {\n            return null;\n        }\n        var str = \"\";\n        var nextToken;\n        while((nextToken = this.fetch()).text !== \"EOF\"){\n            str += nextToken.text;\n            this.consume();\n        }\n        this.consume(); // consume the end of the argument\n        argToken.text = str;\n        return argToken;\n    }\n    /**\n   * Parses a regex-delimited group: the largest sequence of tokens\n   * whose concatenated strings match `regex`. Returns the string\n   * formed by the tokens plus some position information.\n   */ parseRegexGroup(regex, modeName // Used to describe the mode in error messages.\n    ) {\n        var firstToken = this.fetch();\n        var lastToken = firstToken;\n        var str = \"\";\n        var nextToken;\n        while((nextToken = this.fetch()).text !== \"EOF\" && regex.test(str + nextToken.text)){\n            lastToken = nextToken;\n            str += lastToken.text;\n            this.consume();\n        }\n        if (str === \"\") {\n            throw new ParseError(\"Invalid \" + modeName + \": '\" + firstToken.text + \"'\", firstToken);\n        }\n        return firstToken.range(lastToken, str);\n    }\n    /**\n   * Parses a color description.\n   */ parseColorGroup(optional) {\n        var res = this.parseStringGroup(\"color\", optional);\n        if (res == null) {\n            return null;\n        }\n        var match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);\n        if (!match) {\n            throw new ParseError(\"Invalid color: '\" + res.text + \"'\", res);\n        }\n        var color = match[0];\n        if (/^[0-9a-f]{6}$/i.test(color)) {\n            // We allow a 6-digit HTML color spec without a leading \"#\".\n            // This follows the xcolor package's HTML color model.\n            // Predefined color names are all missed by this RegEx pattern.\n            color = \"#\" + color;\n        }\n        return {\n            type: \"color-token\",\n            mode: this.mode,\n            color\n        };\n    }\n    /**\n   * Parses a size specification, consisting of magnitude and unit.\n   */ parseSizeGroup(optional) {\n        var res;\n        var isBlank = false; // don't expand before parseStringGroup\n        this.gullet.consumeSpaces();\n        if (!optional && this.gullet.future().text !== \"{\") {\n            res = this.parseRegexGroup(/^[-+]? *(?:$|\\d+|\\d+\\.\\d*|\\.\\d*) *[a-z]{0,2} *$/, \"size\");\n        } else {\n            res = this.parseStringGroup(\"size\", optional);\n        }\n        if (!res) {\n            return null;\n        }\n        if (!optional && res.text.length === 0) {\n            // Because we've tested for what is !optional, this block won't\n            // affect \\kern, \\hspace, etc. It will capture the mandatory arguments\n            // to \\genfrac and \\above.\n            res.text = \"0pt\"; // Enable \\above{}\n            isBlank = true; // This is here specifically for \\genfrac\n        }\n        var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(res.text);\n        if (!match) {\n            throw new ParseError(\"Invalid size: '\" + res.text + \"'\", res);\n        }\n        var data = {\n            number: +(match[1] + match[2]),\n            // sign + magnitude, cast to number\n            unit: match[3]\n        };\n        if (!validUnit(data)) {\n            throw new ParseError(\"Invalid unit: '\" + data.unit + \"'\", res);\n        }\n        return {\n            type: \"size\",\n            mode: this.mode,\n            value: data,\n            isBlank\n        };\n    }\n    /**\n   * Parses an URL, checking escaped letters and allowed protocols,\n   * and setting the catcode of % as an active character (as in \\hyperref).\n   */ parseUrlGroup(optional) {\n        this.gullet.lexer.setCatcode(\"%\", 13); // active character\n        this.gullet.lexer.setCatcode(\"~\", 12); // other character\n        var res = this.parseStringGroup(\"url\", optional);\n        this.gullet.lexer.setCatcode(\"%\", 14); // comment character\n        this.gullet.lexer.setCatcode(\"~\", 13); // active character\n        if (res == null) {\n            return null;\n        } // hyperref package allows backslashes alone in href, but doesn't\n        // generate valid links in such cases; we interpret this as\n        // \"undefined\" behaviour, and keep them as-is. Some browser will\n        // replace backslashes with forward slashes.\n        var url = res.text.replace(/\\\\([#$%&~_^{}])/g, \"$1\");\n        return {\n            type: \"url\",\n            mode: this.mode,\n            url\n        };\n    }\n    /**\n   * Parses an argument with the mode specified.\n   */ parseArgumentGroup(optional, mode) {\n        var argToken = this.gullet.scanArgument(optional);\n        if (argToken == null) {\n            return null;\n        }\n        var outerMode = this.mode;\n        if (mode) {\n            // Switch to specified mode\n            this.switchMode(mode);\n        }\n        this.gullet.beginGroup();\n        var expression = this.parseExpression(false, \"EOF\"); // TODO: find an alternative way to denote the end\n        this.expect(\"EOF\"); // expect the end of the argument\n        this.gullet.endGroup();\n        var result = {\n            type: \"ordgroup\",\n            mode: this.mode,\n            loc: argToken.loc,\n            body: expression\n        };\n        if (mode) {\n            // Switch mode back\n            this.switchMode(outerMode);\n        }\n        return result;\n    }\n    /**\n   * Parses an ordinary group, which is either a single nucleus (like \"x\")\n   * or an expression in braces (like \"{x+y}\") or an implicit group, a group\n   * that starts at the current position, and ends right before a higher explicit\n   * group ends, or at EOF.\n   */ parseGroup(name, breakOnTokenText) {\n        var firstToken = this.fetch();\n        var text = firstToken.text;\n        var result; // Try to parse an open brace or \\begingroup\n        if (text === \"{\" || text === \"\\\\begingroup\") {\n            this.consume();\n            var groupEnd = text === \"{\" ? \"}\" : \"\\\\endgroup\";\n            this.gullet.beginGroup(); // If we get a brace, parse an expression\n            var expression = this.parseExpression(false, groupEnd);\n            var lastToken = this.fetch();\n            this.expect(groupEnd); // Check that we got a matching closing brace\n            this.gullet.endGroup();\n            result = {\n                type: \"ordgroup\",\n                mode: this.mode,\n                loc: SourceLocation.range(firstToken, lastToken),\n                body: expression,\n                // A group formed by \\begingroup...\\endgroup is a semi-simple group\n                // which doesn't affect spacing in math mode, i.e., is transparent.\n                // https://tex.stackexchange.com/questions/1930/when-should-one-\n                // use-begingroup-instead-of-bgroup\n                semisimple: text === \"\\\\begingroup\" || undefined\n            };\n        } else {\n            // If there exists a function with this name, parse the function.\n            // Otherwise, just return a nucleus\n            result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol();\n            if (result == null && text[0] === \"\\\\\" && !implicitCommands.hasOwnProperty(text)) {\n                if (this.settings.throwOnError) {\n                    throw new ParseError(\"Undefined control sequence: \" + text, firstToken);\n                }\n                result = this.formatUnsupportedCmd(text);\n                this.consume();\n            }\n        }\n        return result;\n    }\n    /**\n   * Form ligature-like combinations of characters for text mode.\n   * This includes inputs like \"--\", \"---\", \"``\" and \"''\".\n   * The result will simply replace multiple textord nodes with a single\n   * character in each value by a single textord node having multiple\n   * characters in its value.  The representation is still ASCII source.\n   * The group will be modified in place.\n   */ formLigatures(group) {\n        var n = group.length - 1;\n        for(var i = 0; i < n; ++i){\n            var a = group[i]; // $FlowFixMe: Not every node type has a `text` property.\n            var v = a.text;\n            if (v === \"-\" && group[i + 1].text === \"-\") {\n                if (i + 1 < n && group[i + 2].text === \"-\") {\n                    group.splice(i, 3, {\n                        type: \"textord\",\n                        mode: \"text\",\n                        loc: SourceLocation.range(a, group[i + 2]),\n                        text: \"---\"\n                    });\n                    n -= 2;\n                } else {\n                    group.splice(i, 2, {\n                        type: \"textord\",\n                        mode: \"text\",\n                        loc: SourceLocation.range(a, group[i + 1]),\n                        text: \"--\"\n                    });\n                    n -= 1;\n                }\n            }\n            if ((v === \"'\" || v === \"`\") && group[i + 1].text === v) {\n                group.splice(i, 2, {\n                    type: \"textord\",\n                    mode: \"text\",\n                    loc: SourceLocation.range(a, group[i + 1]),\n                    text: v + v\n                });\n                n -= 1;\n            }\n        }\n    }\n    /**\n   * Parse a single symbol out of the string. Here, we handle single character\n   * symbols and special functions like \\verb.\n   */ parseSymbol() {\n        var nucleus = this.fetch();\n        var text = nucleus.text;\n        if (/^\\\\verb[^a-zA-Z]/.test(text)) {\n            this.consume();\n            var arg = text.slice(5);\n            var star = arg.charAt(0) === \"*\";\n            if (star) {\n                arg = arg.slice(1);\n            } // Lexer's tokenRegex is constructed to always have matching\n            // first/last characters.\n            if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {\n                throw new ParseError(\"\\\\verb assertion failed --\\n                    please report what input caused this bug\");\n            }\n            arg = arg.slice(1, -1); // remove first and last char\n            return {\n                type: \"verb\",\n                mode: \"text\",\n                body: arg,\n                star\n            };\n        } // At this point, we should have a symbol, possibly with accents.\n        // First expand any accented base symbol according to unicodeSymbols.\n        if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) {\n            // This behavior is not strict (XeTeX-compatible) in math mode.\n            if (this.settings.strict && this.mode === \"math\") {\n                this.settings.reportNonstrict(\"unicodeTextInMathMode\", 'Accented Unicode text character \"' + text[0] + '\" used in ' + \"math mode\", nucleus);\n            }\n            text = unicodeSymbols[text[0]] + text.slice(1);\n        } // Strip off any combining characters\n        var match = combiningDiacriticalMarksEndRegex.exec(text);\n        if (match) {\n            text = text.substring(0, match.index);\n            if (text === \"i\") {\n                text = \"ı\"; // dotless i, in math and text mode\n            } else if (text === \"j\") {\n                text = \"ȷ\"; // dotless j, in math and text mode\n            }\n        } // Recognize base symbol\n        var symbol;\n        if (symbols[this.mode][text]) {\n            if (this.settings.strict && this.mode === \"math\" && extraLatin.indexOf(text) >= 0) {\n                this.settings.reportNonstrict(\"unicodeTextInMathMode\", 'Latin-1/Unicode text character \"' + text[0] + '\" used in ' + \"math mode\", nucleus);\n            }\n            var group = symbols[this.mode][text].group;\n            var loc = SourceLocation.range(nucleus);\n            var s;\n            if (ATOMS.hasOwnProperty(group)) {\n                // $FlowFixMe\n                var family = group;\n                s = {\n                    type: \"atom\",\n                    mode: this.mode,\n                    family,\n                    loc,\n                    text\n                };\n            } else {\n                // $FlowFixMe\n                s = {\n                    type: group,\n                    mode: this.mode,\n                    loc,\n                    text\n                };\n            } // $FlowFixMe\n            symbol = s;\n        } else if (text.charCodeAt(0) >= 0x80) {\n            // no symbol for e.g. ^\n            if (this.settings.strict) {\n                if (!supportedCodepoint(text.charCodeAt(0))) {\n                    this.settings.reportNonstrict(\"unknownSymbol\", 'Unrecognized Unicode character \"' + text[0] + '\"' + (\" (\" + text.charCodeAt(0) + \")\"), nucleus);\n                } else if (this.mode === \"math\") {\n                    this.settings.reportNonstrict(\"unicodeTextInMathMode\", 'Unicode text character \"' + text[0] + '\" used in math mode', nucleus);\n                }\n            } // All nonmathematical Unicode characters are rendered as if they\n            // are in text mode (wrapped in \\text) because that's what it\n            // takes to render them in LaTeX.  Setting `mode: this.mode` is\n            // another natural choice (the user requested math mode), but\n            // this makes it more difficult for getCharacterMetrics() to\n            // distinguish Unicode characters without metrics and those for\n            // which we want to simulate the letter M.\n            symbol = {\n                type: \"textord\",\n                mode: \"text\",\n                loc: SourceLocation.range(nucleus),\n                text\n            };\n        } else {\n            return null; // EOF, ^, _, {, }, etc.\n        }\n        this.consume(); // Transform combining characters into accents\n        if (match) {\n            for(var i = 0; i < match[0].length; i++){\n                var accent = match[0][i];\n                if (!unicodeAccents[accent]) {\n                    throw new ParseError(\"Unknown accent ' \" + accent + \"'\", nucleus);\n                }\n                var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text;\n                if (!command) {\n                    throw new ParseError(\"Accent \" + accent + \" unsupported in \" + this.mode + \" mode\", nucleus);\n                }\n                symbol = {\n                    type: \"accent\",\n                    mode: this.mode,\n                    loc: SourceLocation.range(nucleus),\n                    label: command,\n                    isStretchy: false,\n                    isShifty: true,\n                    // $FlowFixMe\n                    base: symbol\n                };\n            }\n        } // $FlowFixMe\n        return symbol;\n    }\n}\nParser.endOfExpression = [\n    \"}\",\n    \"\\\\endgroup\",\n    \"\\\\end\",\n    \"\\\\right\",\n    \"&\"\n];\n/**\n * Provides a single function for parsing an expression using a Parser\n * TODO(emily): Remove this\n */ /**\n * Parses an expression using a Parser, then returns the parsed result.\n */ var parseTree = function parseTree(toParse, settings) {\n    if (!(typeof toParse === \"string\" || toParse instanceof String)) {\n        throw new TypeError(\"KaTeX can only parse string typed expression\");\n    }\n    var parser = new Parser(toParse, settings); // Blank out any \\df@tag to avoid spurious \"Duplicate \\tag\" errors\n    delete parser.gullet.macros.current[\"\\\\df@tag\"];\n    var tree = parser.parse(); // Prevent a color definition from persisting between calls to katex.render().\n    delete parser.gullet.macros.current[\"\\\\current@color\"];\n    delete parser.gullet.macros.current[\"\\\\color\"]; // If the input used \\tag, it will set the \\df@tag macro to the tag.\n    // In this case, we separately parse the tag and wrap the tree.\n    if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n        if (!settings.displayMode) {\n            throw new ParseError(\"\\\\tag works only in display equations\");\n        }\n        tree = [\n            {\n                type: \"tag\",\n                mode: \"text\",\n                body: tree,\n                tag: parser.subparse([\n                    new Token(\"\\\\df@tag\")\n                ])\n            }\n        ];\n    }\n    return tree;\n};\n/* eslint no-console:0 */ /**\n * Parse and build an expression, and place that expression in the DOM node\n * given.\n */ var render = function render(expression, baseNode, options) {\n    baseNode.textContent = \"\";\n    var node = renderToDomTree(expression, options).toNode();\n    baseNode.appendChild(node);\n}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and\n// disable rendering.\nif (typeof document !== \"undefined\") {\n    if (document.compatMode !== \"CSS1Compat\") {\n        typeof console !== \"undefined\" && console.warn(\"Warning: KaTeX doesn't work in quirks mode. Make sure your \" + \"website has a suitable doctype.\");\n        render = function render() {\n            throw new ParseError(\"KaTeX doesn't work in quirks mode.\");\n        };\n    }\n}\n/**\n * Parse and build an expression, and return the markup for that.\n */ var renderToString = function renderToString(expression, options) {\n    var markup = renderToDomTree(expression, options).toMarkup();\n    return markup;\n};\n/**\n * Parse an expression and return the parse tree.\n */ var generateParseTree = function generateParseTree(expression, options) {\n    var settings = new Settings(options);\n    return parseTree(expression, settings);\n};\n/**\n * If the given error is a KaTeX ParseError and options.throwOnError is false,\n * renders the invalid LaTeX as a span with hover title giving the KaTeX\n * error message.  Otherwise, simply throws the error.\n */ var renderError = function renderError(error, expression, options) {\n    if (options.throwOnError || !(error instanceof ParseError)) {\n        throw error;\n    }\n    var node = buildCommon.makeSpan([\n        \"katex-error\"\n    ], [\n        new SymbolNode(expression)\n    ]);\n    node.setAttribute(\"title\", error.toString());\n    node.setAttribute(\"style\", \"color:\" + options.errorColor);\n    return node;\n};\n/**\n * Generates and returns the katex build tree. This is used for advanced\n * use cases (like rendering to custom output).\n */ var renderToDomTree = function renderToDomTree(expression, options) {\n    var settings = new Settings(options);\n    try {\n        var tree = parseTree(expression, settings);\n        return buildTree(tree, expression, settings);\n    } catch (error) {\n        return renderError(error, expression, settings);\n    }\n};\n/**\n * Generates and returns the katex build tree, with just HTML (no MathML).\n * This is used for advanced use cases (like rendering to custom output).\n */ var renderToHTMLTree = function renderToHTMLTree(expression, options) {\n    var settings = new Settings(options);\n    try {\n        var tree = parseTree(expression, settings);\n        return buildHTMLTree(tree, expression, settings);\n    } catch (error) {\n        return renderError(error, expression, settings);\n    }\n};\nvar katex = {\n    /**\n   * Current KaTeX version\n   */ version: \"0.16.8\",\n    /**\n   * Renders the given LaTeX into an HTML+MathML combination, and adds\n   * it as a child to the specified DOM node.\n   */ render,\n    /**\n   * Renders the given LaTeX into an HTML+MathML combination string,\n   * for sending to the client.\n   */ renderToString,\n    /**\n   * KaTeX error, usually during parsing.\n   */ ParseError,\n    /**\n   * The shema of Settings\n   */ SETTINGS_SCHEMA,\n    /**\n   * Parses the given LaTeX into KaTeX's internal parse tree structure,\n   * without rendering to HTML or MathML.\n   *\n   * NOTE: This method is not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */ __parse: generateParseTree,\n    /**\n   * Renders the given LaTeX into an HTML+MathML internal DOM tree\n   * representation, without flattening that representation to a string.\n   *\n   * NOTE: This method is not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */ __renderToDomTree: renderToDomTree,\n    /**\n   * Renders the given LaTeX into an HTML internal DOM tree representation,\n   * without MathML and without flattening that representation to a string.\n   *\n   * NOTE: This method is not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */ __renderToHTMLTree: renderToHTMLTree,\n    /**\n   * extends internal font metrics object with a new object\n   * each key in the new object represents a font name\n  */ __setFontMetrics: setFontMetrics,\n    /**\n   * adds a new symbol to builtin symbols table\n   */ __defineSymbol: defineSymbol,\n    /**\n   * adds a new function to builtin function list,\n   * which directly produce parse tree elements\n   * and have their own html/mathml builders\n   */ __defineFunction: defineFunction,\n    /**\n   * adds a new macro to builtin macro list\n   */ __defineMacro: defineMacro,\n    /**\n   * Expose the dom tree node types, which can be useful for type checking nodes.\n   *\n   * NOTE: This method is not currently recommended for public use.\n   * The internal tree representation is unstable and is very likely\n   * to change. Use at your own risk.\n   */ __domTree: {\n        Span,\n        Anchor,\n        SymbolNode,\n        SvgNode,\n        PathNode,\n        LineNode\n    }\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMva2F0ZXgvZGlzdC9rYXRleC5tanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7Q0FHQyxHQUNELE1BQU1BO0lBQ0osNERBQTREO0lBQzVELGtDQUFrQztJQUNsQyxzQ0FBc0M7SUFDdEMsb0NBQW9DO0lBQ3BDQyxZQUFZQyxLQUFLLEVBQUVDLEtBQUssRUFBRUMsR0FBRyxDQUFFO1FBQzdCLElBQUksQ0FBQ0YsS0FBSyxHQUFHLEtBQUs7UUFDbEIsSUFBSSxDQUFDQyxLQUFLLEdBQUcsS0FBSztRQUNsQixJQUFJLENBQUNDLEdBQUcsR0FBRyxLQUFLO1FBQ2hCLElBQUksQ0FBQ0YsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsR0FBRyxHQUFHQTtJQUNiO0lBQ0E7Ozs7Ozs7R0FPQyxHQUdELE9BQU9DLE1BQU1DLEtBQUssRUFBRUMsTUFBTSxFQUFFO1FBQzFCLElBQUksQ0FBQ0EsUUFBUTtZQUNYLE9BQU9ELFNBQVNBLE1BQU1FLEdBQUc7UUFDM0IsT0FBTyxJQUFJLENBQUNGLFNBQVMsQ0FBQ0EsTUFBTUUsR0FBRyxJQUFJLENBQUNELE9BQU9DLEdBQUcsSUFBSUYsTUFBTUUsR0FBRyxDQUFDTixLQUFLLEtBQUtLLE9BQU9DLEdBQUcsQ0FBQ04sS0FBSyxFQUFFO1lBQ3RGLE9BQU87UUFDVCxPQUFPO1lBQ0wsT0FBTyxJQUFJRixlQUFlTSxNQUFNRSxHQUFHLENBQUNOLEtBQUssRUFBRUksTUFBTUUsR0FBRyxDQUFDTCxLQUFLLEVBQUVJLE9BQU9DLEdBQUcsQ0FBQ0osR0FBRztRQUM1RTtJQUNGO0FBRUY7QUFFQTs7O0NBR0MsR0FFRDs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxNQUFNSztJQUNKLHlCQUF5QjtJQUN6QixvQkFBb0I7SUFDcEJSLFlBQVlTLElBQUksRUFDaEJGLEdBQUcsQ0FBRTtRQUNILElBQUksQ0FBQ0UsSUFBSSxHQUFHLEtBQUs7UUFDakIsSUFBSSxDQUFD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QUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUNuQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE9BQU87WUFBQztZQUFH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WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUNyQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUNyQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUTtZQUFPO1lBQUc7WUFBRztTQUFRO1FBQ3RDLFFBQVE7WUFBQztZQUFRO1lBQU87WUFBRztZQUFHO1NBQVE7UUFDdEMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBTztZQUFHO1lBQUc7U0FBUTtRQUNqQyxRQUFRO1lBQUM7WUFBRztZQUFPO1lBQUc7WUFBRztTQUFRO1FBQ2pDLFFBQVE7WUFBQztZQUFHO1lBQU87WUFBRztZQUFHO1NBQVE7UUFDakMsUUFBUTtZQUFDO1lBQUc7WUFBTztZQUFHO1lBQUc7U0FBUTtRQUNqQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUTtZQUFRO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLFFBQVE7WUFBQztZQUFRO1lBQVE7WUFBRztZQUFHO1NBQVE7UUFDdkMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQy9CLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDL0IsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUMvQixRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQy9CLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFPO1lBQUc7WUFBRztTQUFRO1FBQ2pDLFFBQVE7WUFBQztZQUFHO1lBQU87WUFBRztZQUFHO1NBQVE7UUFDakMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFNBQVM7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDcEMsU0FBUztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNwQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO0lBQzVDO0lBQ0EsdUJBQXVCO1FBQ3JCLE1BQU07WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDeEIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFRO1lBQVM7U0FBUTtRQUNsRCxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUNuRCxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBTztRQUN0QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQU87UUFDdEMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFPO1lBQVM7U0FBUTtRQUMzQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQU87UUFDNUMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUNuRCxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE9BQU87WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7SUFDM0I7SUFDQSxtQkFBbUI7UUFDakIsTUFBTTtZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBSztRQUN4QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDeEMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFPO1FBQ2hDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU87UUFDdEMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTztRQUN2QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lB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O1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3hDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFPO1FBQ2hDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7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O1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBTTtRQUN2QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBTTtRQUN2QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUN2QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUN2QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBTTtRQUNqQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFNO1lBQUc7WUFBRztTQUFNO1FBQ3BDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFNO1FBQ2pDLFFBQVE7WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQU07UUFDakMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3hDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUN4QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDeEMsUUFBUTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQU07UUFDakMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQy9DLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBTTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDeEMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUN4QyxRQUFRO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDeEMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDeEMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDaEMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFNBQVM7WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDcEMsU0FBUztZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNwQyxTQUFTO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ2hDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFFO0lBQ3RDO0lBQ0EsbUJBQW1CO1FBQ2pCLE1BQU07WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDeEIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQVM7WUFBTTtZQUFTO1lBQUc7U0FBUTtRQUMxQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQU07WUFBUztZQUFHO1NBQVE7UUFDcEMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzdDLE1BQU07WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM5QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVE7WUFBRztTQUFRO1FBQ3RDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFPO1FBQ3RDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFPO1lBQUc7U0FBUTtRQUNyQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFPO1FBQ3RDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFRO1lBQUc7U0FBUTtRQUN0QyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFPO1FBQ3RDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBUTtZQUFHO1NBQVE7UUFDdEMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFNO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDMUMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQU87WUFBRztTQUFRO1FBQ3RDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDMUMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFPO1lBQUc7U0FBUTtRQUM1QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFRO1lBQUc7U0FBUTtRQUM3QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQU87WUFBRztTQUFRO1FBQzVDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFNO1FBQ3RDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFPO1lBQUc7U0FBUTtRQUM1QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFNO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDM0MsT0FBTztZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBSztRQUN6QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBRztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBTTtRQUM1QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQU87WUFBRztTQUFRO1FBQ3RDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBTztZQUFHO1NBQVE7UUFDdEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBTTtRQUM1QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFPO1FBQ3ZDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFRO1lBQUc7U0FBUTtRQUN2QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtJQUMzQztJQUNBLGVBQWU7UUFDYixNQUFNO1lBQUM7WUFBRztZQUFHO1lBQUc7WUFBRztTQUFLO1FBQ3hCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFTO1lBQU07WUFBUztZQUFHO1NBQVE7UUFDMUMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFNO1lBQVM7WUFBRztTQUFRO1FBQ3BDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUTtZQUFHO1NBQVE7UUFDdEMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFRO1lBQUc7U0FBUTtRQUM1QyxNQUFNO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFRO1lBQUc7U0FBUTtRQUN0QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQU07UUFDckMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQU07UUFDckMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQVE7WUFBRztTQUFRO1FBQ3RDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBTTtZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzFDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSztRQUNwQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFLO1FBQ3BDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSztRQUNyQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQUs7UUFDM0MsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVE7WUFBRztTQUFRO1FBQ3ZDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSztRQUNyQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBSztRQUMzQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUs7UUFDckMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBTTtZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzNDLE9BQU87WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDekIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFTO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDL0IsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVE7WUFBRztTQUFRO1FBQ3ZDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUTtZQUFHO1NBQVE7UUFDeEMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO0lBQ3JDO0lBQ0EsZ0JBQWdCO1FBQ2QsTUFBTTtZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBSztRQUN4QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBUztZQUFNO1lBQUc7WUFBRztTQUFJO1FBQ2hDLE1BQU07WUFBQztZQUFTO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDcEMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFNO1lBQUc7WUFBRztTQUFJO1FBQzFCLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBUTtZQUFRO1lBQUc7WUFBRztTQUFRO1FBQ3JDLE1BQU07WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxNQUFNO1lBQUM7WUFBUTtZQUFRO1lBQUc7WUFBRztTQUFRO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQzlCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDOUIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDOUIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSztRQUM5QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFLO1FBQ3BDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSztRQUM5QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQU87WUFBRztTQUFLO1FBQ2xDLE1BQU07WUFBQztZQUFH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RztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUTtZQUFRO1lBQUc7WUFBRztTQUFJO1FBQ25DLFFBQVE7WUFBQztZQUFRO1lBQVE7WUFBRztZQUFHO1NBQUk7UUFDbkMsUUFBUTtZQUFDO1lBQVE7WUFBUTtZQUFHO1lBQUc7U0FBUTtRQUN2QyxRQUFRO1lBQUM7WUFBUTtZQUFRO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLFFBQVE7WUFBQztZQUFRO1lBQVE7WUFBRztZQUFHO1NBQVE7UUFDdkMsUUFBUTtZQUFDO1lBQVE7WUFBUTtZQUFHO1lBQUc7U0FBUTtRQUN2QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFPO1lBQU07WUFBRztZQUFHO1NBQU07UUFDbEMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3RDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDdEMsUUFBUTtZQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBSTtRQUNqQyxRQUFRO1lBQUM7WUFBTTtZQUFPO1lBQUc7WUFBRztTQUFNO1FBQ2xDLFFBQVE7WUFBQyxDQUFDO1lBQU07WUFBTztZQUFHO1lBQUc7U0FBTTtRQUNuQyxRQUFRO1lBQUMsQ0FBQztZQUFLO1lBQU87WUFBRztZQUFHO1NBQU07UUFDbEMsUUFBUTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDdEMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3RDLFFBQVE7WUFBQztZQUFPO1lBQU87WUFBRztZQUFHO1NBQU07UUFDbkMsUUFBUTtZQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBTTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUN0QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUN0QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3JDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNoQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsU0FBUztZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNwQyxTQUFTO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ3BDLFNBQVM7WUFBQztZQUFPO1lBQU87WUFBRztZQUFHO1NBQU07UUFDcEMsU0FBUztZQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBTTtRQUNwQyxTQUFTO1lBQUM7WUFBTztZQUFPO1lBQUc7WUFBRztTQUFNO1FBQ3BDLFNBQVM7WUFBQztZQUFPO1lBQU87WUFBRztZQUFHO1NBQU07UUFDcEMsU0FBUztZQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBTTtRQUNwQyxTQUFTO1lBQUM7WUFBTztZQUFPO1lBQUc7WUFBRztTQUFNO1FBQ3BDLFNBQVM7WUFBQztZQUFPO1lBQU87WUFBRztZQUFHO1NBQU07UUFDcEMsU0FBUztZQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBTTtRQUNwQyxTQUFTO1lBQUM7WUFBTztZQUFPO1lBQUc7WUFBRztTQUFNO1FBQ3BDLFNBQVM7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDakMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUU7SUFDdEM7SUFDQSxtQkFBbUI7UUFDakIsTUFBTTtZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBSztRQUN4QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3JDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDckMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNyQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDckMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBTztRQUN0QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFPO1FBQzdDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTztRQUNqQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVE7WUFBRztTQUFRO1FBQzdDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQU87UUFDdkMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFRO1lBQUc7U0FBUTtRQUN2QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFPO1FBQ2pDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBTztRQUN2QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBSztRQUN6QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQU87UUFDdkMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUMxQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFPO1FBQ3ZDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFPO1FBQ3ZDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU87UUFDdkMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBTTtRQUN0QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFPO1FBQ3hDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsU0FBUztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNwQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO0lBQzVDO0lBQ0EsZUFBZTtRQUNiLE1BQU07WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDeEIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUNuQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ25DLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDbkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ25DLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUNuQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFLO1FBQ3BDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQU87UUFDNUMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFPO1FBQzVDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDdkMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDcEQsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUNwRCxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFPO1FBQ3ZDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQ3BELE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUNwRCxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDekIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFNO1lBQVM7U0FBUTtRQUMzQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFPO1FBQzdDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUTtZQUFTO1NBQU87UUFDNUMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUNwRCxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBUztTQUFPO1FBQ25ELE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDcEQsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQVM7U0FBTztRQUNuRCxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQ3BELE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFRO1lBQVM7U0FBUTtRQUM3QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQ3BELE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUMvQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFPO1FBQ3hDLFNBQVM7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQVM7U0FBUTtJQUNsRDtJQUNBLGtCQUFrQjtRQUNoQixNQUFNO1lBQUM7WUFBRztZQUFHO1lBQUc7WUFBRztTQUFLO1FBQ3hCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQU07WUFBRztZQUFHO1NBQUs7UUFDakMsTUFBTTtZQUFDO1lBQVM7WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNwQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQU07WUFBRztZQUFHO1NBQUs7UUFDM0IsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFLO1FBQzlCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDOUIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSztRQUM5QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQzlCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDOUIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSztRQUM5QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQzlCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDOUIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSztRQUM5QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQzlCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDOUIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7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QUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSztRQUMvQixPQUFPO1lBQUM7WUFBUztZQUFHO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQy9CLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDL0IsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSztRQUMvQixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQy9CLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQy9CLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDL0IsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUs7UUFDdEMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO0lBQ3JDO0lBQ0Esb0JBQW9CO1FBQ2xCLE1BQU07WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDeEIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFJO1FBQ25DLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQVM7WUFBTTtZQUFTO1lBQUc7U0FBSTtRQUN0QyxNQUFNO1lBQUM7WUFBUztZQUFNO1lBQVM7WUFBRztTQUFRO1FBQzFDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBTTtZQUFTO1lBQUc7U0FBSTtRQUNoQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFPO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDckMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBUztZQUFHO1NBQUk7UUFDbkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUNuQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFJO1FBQ25DLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDbkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUNuQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFJO1FBQ25DLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDbkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUNuQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFJO1FBQ25DLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDbkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUNuQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFPO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDM0MsTUFBTTtZQUFDLENBQUM7WUFBTTtZQUFNO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFNO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFPO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDM0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBTztRQUN0QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVE7WUFBRztTQUFRO1FBQ3RDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUTtZQUFHO1NBQVE7UUFDdEMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUTtZQUFHO1NBQUk7UUFDbEMsTUFBTTtZQUFDO1lBQU07WUFBUztZQUFTO1lBQUc7U0FBSTtRQUN0QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFJO1FBQzFDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUNwQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVE7WUFBRztTQUFRO1FBQzdDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVE7WUFBRztTQUFRO1FBQ3ZDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQU07WUFBUztZQUFTO1lBQUc7U0FBSTtRQUN2QyxPQUFPO1lBQUM7WUFBRztZQUFHO1lBQUc7WUFBRztTQUFLO1FBQ3pCLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDcEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBUztZQUFHO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVE7WUFBRztTQUFJO1FBQ25DLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDcEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUNwQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFJO1FBQ3BDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDOUIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUNwQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUNwQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFJO1FBQ3BDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFJO1FBQ3JDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDckMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDckMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSTtJQUN2QztJQUNBLHFCQUFxQjtRQUNuQixNQUFNO1lBQUM7WUFBRztZQUFHO1lBQUc7WUFBRztTQUFLO1FBQ3hCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQU07WUFBRztZQUFHO1NBQUk7UUFDaEMsTUFBTTtZQUFDO1lBQVM7WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNwQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQU07WUFBRztZQUFHO1NBQUk7UUFDMUIsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBTztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3JDLE1BQU07WUFBQyxDQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNsQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU87UUFDaEMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFPO1lBQUc7U0FBUTtRQUNyQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFNO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDdEMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUMxQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDOUIsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFNO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDakMsT0FBTztZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBSztRQUN6QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzlCLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBRztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM5QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzlCLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDOUIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM5QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzlCLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDOUIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDOUIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM5QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFB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WUFBRztTQUFRO1FBQ3BDLE1BQU07WUFBQztZQUFTO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDcEMsTUFBTTtZQUFDO1lBQVM7WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNwQyxNQUFNO1lBQUM7WUFBUztZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ3BDLE9BQU87WUFBQztZQUFTO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDckMsT0FBTztZQUFDO1lBQVM7WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNyQyxPQUFPO1lBQUM7WUFBRztZQUFHO1lBQUc7WUFBRztTQUFLO1FBQ3pCLE9BQU87WUFBQztZQUFHO1lBQU07WUFBRztZQUFHO1NBQUk7UUFDM0IsT0FBTztZQUFDO1lBQUc7WUFBTTtZQUFHO1lBQUc7U0FBSTtRQUMzQixPQUFPO1lBQUM7WUFBRztZQUFNO1lBQUc7WUFBRztTQUFJO1FBQzNCLE9BQU87WUFBQztZQUFHO1lBQU07WUFBRztZQUFHO1NBQUk7UUFDM0IsUUFBUTtZQUFDO1lBQVM7WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUN0QyxRQUFRO1lBQUM7WUFBUztZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ3RDLFFBQVE7WUFBQztZQUFTO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDdEMsUUFBUTtZQUFDO1lBQVM7WUFBTTtZQUFHO1lBQUc7U0FBSTtRQUNsQyxRQUFRO1lBQUM7WUFBUztZQUFNO1lBQVM7WUFBRztTQUFRO1FBQzVDLFFBQVE7WUFBQztZQUFPO1lBQU07WUFBUztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQU87WUFBTTtZQUFTO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUM7WUFBUztZQUFNO1lBQVM7WUFBRztTQUFRO1FBQzVDLFFBQVE7WUFBQztZQUFTO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDdEMsUUFBUTtZQUFDO1lBQVM7WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUN0QyxRQUFRO1lBQUM7WUFBUztZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ3RDLFFBQVE7WUFBQztZQUFTO1lBQU07WUFB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WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNyQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3RDLE1BQU07WUFBQztZQUFTO1lBQU87WUFBRztZQUFHO1NBQU07UUFDbkMsTUFBTTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3RDLE1BQU07WUFBQztZQUFHO1lBQU87WUFBRztZQUFHO1NBQU07UUFDN0IsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNyQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNyQyxNQUFNO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDdEMsTUFBTTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3RDLE1BQU07WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUN0QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDckMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNyQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQVM7WUFBRztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDdEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDdEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDdEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUN0QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDdEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3RDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDdEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUN0QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBTTtRQUMxQixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFTO1lBQUc7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3RDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztT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U0FBUyxLQUFLO0FBQ3ZDZixhQUFhRSxNQUFNQyxNQUFNWSxTQUFTLEtBQUs7QUFDdkNmLGFBQWFFLE1BQU1DLE1BQU1ZLFNBQVMsS0FBSztBQUN2Q2YsYUFBYUUsTUFBTUMsTUFBTVksU0FBUyxLQUFLO0FBQ3ZDZixhQUFhRSxNQUFNQyxNQUFNWSxTQUFTLEtBQUs7QUFDdkNmLGFBQWFFLE1BQU1DLE1BQU1ZLFNBQVMsS0FBSztBQUN2Q2YsYUFBYUUsTUFBTUMsTUFBTVksU0FBUyxLQUFLO0FBQ3ZDZixhQUFhRSxNQUFNQyxNQUFNWSxTQUFTLEtBQUs7QUFDdkNmLGFBQWFFLE1BQU1DLE1BQU1ZLFNBQVMsS0FBSztBQUN2Q2YsYUFBYUUsTUFBTUMsTUFBTVksU0FBUyxRQUFVLFNBQVM7QUFDckRmLGFBQWFFLE1BQU1DLE1BQU1ZLFNBQVMsUUFBVTtBQUM1Q2YsYUFBYUUsTUFBTUMsTUFBTVksU0FBUyxLQUFVO0FBQzVDZixhQUFhRSxNQUFNQyxNQUFNWSxTQUFTLEtBQVU7QUFDNUNmLGFBQWFFLE1BQU1DLE1BQU1ZLFNBQVMsS0FBVTtBQUM1Q2YsYUFBYUUsTUFBTUUsS0FBS1csU0FBUyxLQUFVO0FBQzNDZixhQUFhRSxNQUFNQyxNQUFNTSxTQUFTLEtBQVUsV0FBVztBQUN2RFQsYUFBYUUsTUFBTUMsTUFBTU0sU0FBUyxLQUFVLFVBQVU7QUFDdERULGFBQWFFLE1BQU1DLE1BQU1NLFNBQVMsS0FBVSxXQUFXO0FBQ3ZEVCxhQUFhRSxNQUFNQyxNQUFNTSxTQUFTLEtBQVUsV0FBVztBQUN2RFQsYUFBYUUsTUFBTUMsTUFBTU0sU0FBUyxLQUFVLGFBQWE7QUFDekRULGFBQWFFLE1BQU1DLE1BQU1NLFNBQVMsS0FBVSxVQUFVO0FBQ3REVCxhQUFhRSxNQUFNQyxNQUFNTSxTQUFTLEtBQVUsU0FBUztBQUNyRFQsYUFBYUUsTUFBTUMsTUFBTU0sU0FBUyxLQUFVLFdBQVc7QUFDdkRULGFBQWFFLE1BQU1DLE1BQU1NLFNBQVMsS0FBVSxVQUFVO0FBQ3REVCxhQUFhRSxNQUFNQyxNQUFNTSxTQUFTLEtBQVUs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S0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtBQUNaO0FBRUEsa0NBQWtDLEdBRWxDLElBQUlDLGlCQUFpQjtJQUNuQixLQUFLO1FBQ0gsUUFBUTtRQUNSLFFBQVE7SUFDVjtJQUNBLEtBQUs7UUFDSCxRQUFRO1FBQ1IsUUFBUTtJQUNWO0lBQ0EsS0FBSztRQUNILFFBQVE7UUFDUixRQUFRO0lBQ1Y7SUFDQSxLQUFLO1FBQ0gsUUFBUTtRQUNSLFFBQVE7SUFDVjtJQUNBLEtBQUs7UUFDSCxRQUFRO1FBQ1IsUUFBUTtJQUNWO0lBQ0EsS0FBSztRQUNILFFBQVE7UUFDUixRQUFRO0lBQ1Y7SUFDQSxLQUFLO1FBQ0gsUUFBUTtRQUNSLFFBQVE7SUFDVjtJQUNBLEtBQUs7UUFDSCxRQUFRO1FBQ1IsUUFBUTtJQUNWO0lBQ0EsS0FBSztRQUNILFFBQVE7UUFDUixRQUFRO0lBQ1Y7SUFDQSxLQUFLO1FBQ0gsUUFBUTtRQUNSLFFBQVE7SUFDVjtJQUNBLEtBQUs7UUFDSCxRQUFRO0lBQ1Y7SUFDQSxLQUFLO1FBQ0gsUUFBUTtJQUNWO0FBQ0Y7QUFDQSxJQUFJQyxpQkFBaUI7SUFDbkIsUUFBSztJQUNMLFFBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsUUFBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxRQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsUUFBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLFFBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxRQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLFFBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsUUFBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLFFBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLFFBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7QUFDUDtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNEJDLEdBQ0QsTUFBTUM7SUFDSm52QyxZQUFZcUIsS0FBSyxFQUFFOGtCLFFBQVEsQ0FBRTtRQUMzQixJQUFJLENBQUNuVSxJQUFJLEdBQUcsS0FBSztRQUNqQixJQUFJLENBQUNpZSxNQUFNLEdBQUcsS0FBSztRQUNuQixJQUFJLENBQUM5SixRQUFRLEdBQUcsS0FBSztRQUNyQixJQUFJLENBQUNxUyxjQUFjLEdBQUcsS0FBSztRQUMzQixJQUFJLENBQUNoSSxTQUFTLEdBQUcsS0FBSztRQUN0QixxQkFBcUI7UUFDckIsSUFBSSxDQUFDeGUsSUFBSSxHQUFHLFFBQVEsd0VBQXdFO1FBQzVGLHNFQUFzRTtRQUV0RSxJQUFJLENBQUNpZSxNQUFNLEdBQUcsSUFBSTBkLGNBQWN0c0MsT0FBTzhrQixVQUFVLElBQUksQ0FBQ25VLElBQUksR0FBRyx3Q0FBd0M7UUFFckcsSUFBSSxDQUFDbVUsUUFBUSxHQUFHQSxVQUFVLDZDQUE2QztRQUV2RSxJQUFJLENBQUNxUyxjQUFjLEdBQUc7SUFDeEI7SUFDQTs7O0dBR0MsR0FHREMsT0FBT2g0QixJQUFJLEVBQUU4dkIsT0FBTyxFQUFFO1FBQ3BCLElBQUlBLFlBQVksS0FBSyxHQUFHO1lBQ3RCQSxVQUFVO1FBQ1o7UUFFQSxJQUFJLElBQUksQ0FBQ0QsS0FBSyxHQUFHN3ZCLElBQUksS0FBS0EsTUFBTTtZQUM5QixNQUFNLElBQUlJLFdBQVcsZUFBZUosT0FBTyxhQUFhLElBQUksQ0FBQzZ2QixLQUFLLEdBQUc3dkIsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDNnZCLEtBQUs7UUFDN0Y7UUFFQSxJQUFJQyxTQUFTO1lBQ1gsSUFBSSxDQUFDQSxPQUFPO1FBQ2Q7SUFDRjtJQUNBOztHQUVDLEdBR0RBLFVBQVU7UUFDUixJQUFJLENBQUNDLFNBQVMsR0FBRztJQUNuQjtJQUNBOzs7O0dBSUMsR0FHREYsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDRSxTQUFTLElBQUksTUFBTTtZQUMxQixJQUFJLENBQUNBLFNBQVMsR0FBRyxJQUFJLENBQUNQLE1BQU0sQ0FBQ3ljLGVBQWU7UUFDOUM7UUFFQSxPQUFPLElBQUksQ0FBQ2xjLFNBQVM7SUFDdkI7SUFDQTs7R0FFQyxHQUdEd1UsV0FBVzhJLE9BQU8sRUFBRTtRQUNsQixJQUFJLENBQUM5N0IsSUFBSSxHQUFHODdCO1FBQ1osSUFBSSxDQUFDN2QsTUFBTSxDQUFDK1UsVUFBVSxDQUFDOEk7SUFDekI7SUFDQTs7R0FFQyxHQUdEc0IsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUNqcEIsUUFBUSxDQUFDcGdCLFdBQVcsRUFBRTtZQUM5QixvREFBb0Q7WUFDcEQsaUVBQWlFO1lBQ2pFLElBQUksQ0FBQ2txQixNQUFNLENBQUNDLFVBQVU7UUFDeEIsRUFBRSxxRUFBcUU7UUFDdkUscUVBQXFFO1FBQ3JFLDJCQUEyQjtRQUczQixJQUFJLElBQUksQ0FBQy9KLFFBQVEsQ0FBQzdnQixnQkFBZ0IsRUFBRTtZQUNsQyxJQUFJLENBQUMycUIsTUFBTSxDQUFDdHJCLE1BQU0sQ0FBQ3dyQixHQUFHLENBQUMsV0FBVztRQUNwQztRQUVBLElBQUk7WUFDRix5QkFBeUI7WUFDekIsSUFBSWlmLFFBQVEsSUFBSSxDQUFDaGYsZUFBZSxDQUFDLFFBQVEsdURBQXVEO1lBRWhHLElBQUksQ0FBQ3FJLE1BQU0sQ0FBQyxRQUFRLDZDQUE2QztZQUVqRSxJQUFJLENBQUMsSUFBSSxDQUFDdFMsUUFBUSxDQUFDcGdCLFdBQVcsRUFBRTtnQkFDOUIsSUFBSSxDQUFDa3FCLE1BQU0sQ0FBQ0ksUUFBUTtZQUN0QjtZQUVBLE9BQU8rZSxPQUFPLHNEQUFzRDtRQUN0RSxTQUFVO1lBQ1IsSUFBSSxDQUFDbmYsTUFBTSxDQUFDNmIsU0FBUztRQUN2QjtJQUNGO0lBQ0E7OztHQUdDLEdBR0RyUSxTQUFTNUksTUFBTSxFQUFFO1FBQ2YsNENBQTRDO1FBQzVDLElBQUl3YyxXQUFXLElBQUksQ0FBQzdlLFNBQVM7UUFDN0IsSUFBSSxDQUFDRCxPQUFPLElBQUkscURBQXFEO1FBRXJFLElBQUksQ0FBQ04sTUFBTSxDQUFDd0QsU0FBUyxDQUFDLElBQUlqekIsTUFBTTtRQUNoQyxJQUFJLENBQUN5dkIsTUFBTSxDQUFDOGQsVUFBVSxDQUFDbGI7UUFDdkIsSUFBSXVjLFFBQVEsSUFBSSxDQUFDaGYsZUFBZSxDQUFDO1FBQ2pDLElBQUksQ0FBQ3FJLE1BQU0sQ0FBQyxNQUFNLCtDQUErQztRQUVqRSxJQUFJLENBQUNqSSxTQUFTLEdBQUc2ZTtRQUNqQixPQUFPRDtJQUNUO0lBRUE7Ozs7Ozs7Ozs7R0FVQyxHQUNEaGYsZ0JBQWdCa2YsWUFBWSxFQUFFdmQsZ0JBQWdCLEVBQUU7UUFDOUMsSUFBSTV1QixPQUFPLEVBQUUsRUFBRSw0RUFBNEU7UUFDM0Ysd0NBQXdDO1FBRXhDLE1BQU8sS0FBTTtZQUNYLDZCQUE2QjtZQUM3QixJQUFJLElBQUksQ0FBQzZPLElBQUksS0FBSyxRQUFRO2dCQUN4QixJQUFJLENBQUNnaEIsYUFBYTtZQUNwQjtZQUVBLElBQUlvWSxNQUFNLElBQUksQ0FBQzlhLEtBQUs7WUFFcEIsSUFBSTZlLE9BQU9JLGVBQWUsQ0FBQ3J0QyxPQUFPLENBQUNrcEMsSUFBSTNxQyxJQUFJLE1BQU0sQ0FBQyxHQUFHO2dCQUNuRDtZQUNGO1lBRUEsSUFBSXN4QixvQkFBb0JxWixJQUFJM3FDLElBQUksS0FBS3N4QixrQkFBa0I7Z0JBQ3JEO1lBQ0Y7WUFFQSxJQUFJdWQsZ0JBQWdCaEYsU0FBUyxDQUFDYyxJQUFJM3FDLElBQUksQ0FBQyxJQUFJNnBDLFNBQVMsQ0FBQ2MsSUFBSTNxQyxJQUFJLENBQUMsQ0FBQzZnQixLQUFLLEVBQUU7Z0JBQ3BFO1lBQ0Y7WUFFQSxJQUFJNk0sT0FBTyxJQUFJLENBQUNxaEIsU0FBUyxDQUFDemQ7WUFFMUIsSUFBSSxDQUFDNUQsTUFBTTtnQkFDVDtZQUNGLE9BQU8sSUFBSUEsS0FBS2pyQixJQUFJLEtBQUssWUFBWTtnQkFDbkM7WUFDRjtZQUVBQyxLQUFLNEIsSUFBSSxDQUFDb3BCO1FBQ1o7UUFFQSxJQUFJLElBQUksQ0FBQ25jLElBQUksS0FBSyxRQUFRO1lBQ3hCLElBQUksQ0FBQ3k5QixhQUFhLENBQUN0c0M7UUFDckI7UUFFQSxPQUFPLElBQUksQ0FBQ3VzQyxnQkFBZ0IsQ0FBQ3ZzQztJQUMvQjtJQUNBOzs7Ozs7R0FNQyxHQUdEdXNDLGlCQUFpQnZzQyxJQUFJLEVBQUU7UUFDckIsSUFBSXdzQyxZQUFZLENBQUM7UUFDakIsSUFBSWxqQjtRQUVKLElBQUssSUFBSTFqQixJQUFJLEdBQUdBLElBQUk1RixLQUFLakMsTUFBTSxFQUFFNkgsSUFBSztZQUNwQyxJQUFJNUYsSUFBSSxDQUFDNEYsRUFBRSxDQUFDN0YsSUFBSSxLQUFLLFNBQVM7Z0JBQzVCLElBQUl5c0MsY0FBYyxDQUFDLEdBQUc7b0JBQ3BCLE1BQU0sSUFBSTl1QyxXQUFXLHFDQUFxQ3NDLElBQUksQ0FBQzRGLEVBQUUsQ0FBQ2hJLEtBQUs7Z0JBQ3pFO2dCQUVBNHVDLFlBQVk1bUM7Z0JBQ1owakIsV0FBV3RwQixJQUFJLENBQUM0RixFQUFFLENBQUMrNUIsV0FBVztZQUNoQztRQUNGO1FBRUEsSUFBSTZNLGNBQWMsQ0FBQyxLQUFLbGpCLFVBQVU7WUFDaEMsSUFBSW1qQjtZQUNKLElBQUlDO1lBQ0osSUFBSUMsWUFBWTNzQyxLQUFLNUIsS0FBSyxDQUFDLEdBQUdvdUM7WUFDOUIsSUFBSUksWUFBWTVzQyxLQUFLNUIsS0FBSyxDQUFDb3VDLFlBQVk7WUFFdkMsSUFBSUcsVUFBVTV1QyxNQUFNLEtBQUssS0FBSzR1QyxTQUFTLENBQUMsRUFBRSxDQUFDNXNDLElBQUksS0FBSyxZQUFZO2dCQUM5RDBzQyxZQUFZRSxTQUFTLENBQUMsRUFBRTtZQUMxQixPQUFPO2dCQUNMRixZQUFZO29CQUNWMXNDLE1BQU07b0JBQ044TyxNQUFNLElBQUksQ0FBQ0EsSUFBSTtvQkFDZjdPLE1BQU0yc0M7Z0JBQ1I7WUFDRjtZQUVBLElBQUlDLFVBQVU3dUMsTUFBTSxLQUFLLEtBQUs2dUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzdzQyxJQUFJLEtBQUssWUFBWTtnQkFDOUQyc0MsWUFBWUUsU0FBUyxDQUFDLEVBQUU7WUFDMUIsT0FBTztnQkFDTEYsWUFBWTtvQkFDVjNzQyxNQUFNO29CQUNOOE8sTUFBTSxJQUFJLENBQUNBLElBQUk7b0JBQ2Y3TyxNQUFNNHNDO2dCQUNSO1lBQ0Y7WUFFQSxJQUFJbDZCO1lBRUosSUFBSTRXLGFBQWEsaUJBQWlCO2dCQUNoQzVXLE9BQU8sSUFBSSxDQUFDMlosWUFBWSxDQUFDL0MsVUFBVTtvQkFBQ21qQjtvQkFBV3pzQyxJQUFJLENBQUN3c0MsVUFBVTtvQkFBRUU7aUJBQVUsRUFBRSxFQUFFO1lBQ2hGLE9BQU87Z0JBQ0xoNkIsT0FBTyxJQUFJLENBQUMyWixZQUFZLENBQUMvQyxVQUFVO29CQUFDbWpCO29CQUFXQztpQkFBVSxFQUFFLEVBQUU7WUFDL0Q7WUFFQSxPQUFPO2dCQUFDaDZCO2FBQUs7UUFDZixPQUFPO1lBQ0wsT0FBTzFTO1FBQ1Q7SUFDRjtJQUNBOztHQUVDLEdBR0Q2c0MsbUJBQW1CaHZDLEtBQUssdUJBQXVCO0lBQXhCLEVBQ3JCO1FBQ0EsSUFBSWl2QyxjQUFjLElBQUksQ0FBQzNmLEtBQUs7UUFDNUIsSUFBSTFCLFNBQVNxaEIsWUFBWXh2QyxJQUFJO1FBQzdCLElBQUksQ0FBQzh2QixPQUFPO1FBQ1osSUFBSSxDQUFDeUMsYUFBYSxJQUFJLDhDQUE4QztRQUVwRSxJQUFJL3ZCLFFBQVEsSUFBSSxDQUFDaXRDLFVBQVUsQ0FBQ2x2QztRQUU1QixJQUFJLENBQUNpQyxPQUFPO1lBQ1YsTUFBTSxJQUFJcEMsV0FBVywyQkFBMkIrdEIsU0FBUyxLQUFLcWhCO1FBQ2hFO1FBRUEsT0FBT2h0QztJQUNUO0lBQ0E7OztHQUdDLEdBR0Q0Z0MscUJBQXFCcGpDLElBQUksRUFBRTtRQUN6QixJQUFJMHZDLGVBQWUsRUFBRTtRQUVyQixJQUFLLElBQUlwbkMsSUFBSSxHQUFHQSxJQUFJdEksS0FBS1MsTUFBTSxFQUFFNkgsSUFBSztZQUNwQ29uQyxhQUFhcHJDLElBQUksQ0FBQztnQkFDaEI3QixNQUFNO2dCQUNOOE8sTUFBTTtnQkFDTnZSLE1BQU1BLElBQUksQ0FBQ3NJLEVBQUU7WUFDZjtRQUNGO1FBRUEsSUFBSXF3QixXQUFXO1lBQ2JsMkIsTUFBTTtZQUNOOE8sTUFBTSxJQUFJLENBQUNBLElBQUk7WUFDZjdPLE1BQU1ndEM7UUFDUjtRQUNBLElBQUlDLFlBQVk7WUFDZGx0QyxNQUFNO1lBQ044TyxNQUFNLElBQUksQ0FBQ0EsSUFBSTtZQUNmdE4sT0FBTyxJQUFJLENBQUN5aEIsUUFBUSxDQUFDM2hCLFVBQVU7WUFDL0JyQixNQUFNO2dCQUFDaTJCO2FBQVM7UUFDbEI7UUFDQSxPQUFPZ1g7SUFDVDtJQUNBOztHQUVDLEdBR0RaLFVBQVV6ZCxnQkFBZ0IsRUFBRTtRQUMxQixnRUFBZ0U7UUFDaEUsbUNBQW1DO1FBQ25DLElBQUluSSxPQUFPLElBQUksQ0FBQ3NtQixVQUFVLENBQUMsUUFBUW5lLG1CQUFtQix5REFBeUQ7UUFFL0csSUFBSSxJQUFJLENBQUMvZixJQUFJLEtBQUssUUFBUTtZQUN4QixPQUFPNFg7UUFDVCxFQUFFLHlEQUF5RDtRQUczRCxJQUFJeW1CO1FBQ0osSUFBSUM7UUFFSixNQUFPLEtBQU07WUFDWCxvREFBb0Q7WUFDcEQsSUFBSSxDQUFDdGQsYUFBYSxJQUFJLHNCQUFzQjtZQUU1QyxJQUFJb1ksTUFBTSxJQUFJLENBQUM5YSxLQUFLO1lBRXBCLElBQUk4YSxJQUFJM3FDLElBQUksS0FBSyxjQUFjMnFDLElBQUkzcUMsSUFBSSxLQUFLLGNBQWM7Z0JBQ3hELHlCQUF5QjtnQkFDekIsSUFBSW1wQixRQUFRQSxLQUFLMW1CLElBQUksS0FBSyxNQUFNO29CQUM5QixJQUFJdXJCLFNBQVMyYyxJQUFJM3FDLElBQUksS0FBSztvQkFDMUJtcEIsS0FBSzZFLE1BQU0sR0FBR0E7b0JBQ2Q3RSxLQUFLOEUsa0JBQWtCLEdBQUc7Z0JBQzVCLE9BQU8sSUFBSTlFLFFBQVFBLEtBQUsxbUIsSUFBSSxLQUFLLGdCQUFnQjtvQkFDL0MsSUFBSTBtQixLQUFLOEUsa0JBQWtCLEVBQUU7d0JBQzNCOUUsS0FBSzZFLE1BQU0sR0FBRzJjLElBQUkzcUMsSUFBSSxLQUFLO29CQUM3QjtnQkFDRixPQUFPO29CQUNMLE1BQU0sSUFBSUksV0FBVyw4Q0FBOEN1cUM7Z0JBQ3JFO2dCQUVBLElBQUksQ0FBQzdhLE9BQU87WUFDZCxPQUFPLElBQUk2YSxJQUFJM3FDLElBQUksS0FBSyxLQUFLO2dCQUMzQiw2QkFBNkI7Z0JBQzdCLElBQUk0dkMsYUFBYTtvQkFDZixNQUFNLElBQUl4dkMsV0FBVyxzQkFBc0J1cUM7Z0JBQzdDO2dCQUVBaUYsY0FBYyxJQUFJLENBQUNMLGtCQUFrQixDQUFDO1lBQ3hDLE9BQU8sSUFBSTVFLElBQUkzcUMsSUFBSSxLQUFLLEtBQUs7Z0JBQzNCLDJCQUEyQjtnQkFDM0IsSUFBSTZ2QyxXQUFXO29CQUNiLE1BQU0sSUFBSXp2QyxXQUFXLG9CQUFvQnVxQztnQkFDM0M7Z0JBRUFrRixZQUFZLElBQUksQ0FBQ04sa0JBQWtCLENBQUM7WUFDdEMsT0FBTyxJQUFJNUUsSUFBSTNxQyxJQUFJLEtBQUssS0FBSztnQkFDM0IsaUJBQWlCO2dCQUNqQixJQUFJNHZDLGFBQWE7b0JBQ2YsTUFBTSxJQUFJeHZDLFdBQVcsc0JBQXNCdXFDO2dCQUM3QztnQkFFQSxJQUFJbUYsUUFBUTtvQkFDVnJ0QyxNQUFNO29CQUNOOE8sTUFBTSxJQUFJLENBQUNBLElBQUk7b0JBQ2Z2UixNQUFNO2dCQUNSLEdBQUcsOERBQThEO2dCQUVqRSxJQUFJK3ZDLFNBQVM7b0JBQUNEO2lCQUFNO2dCQUNwQixJQUFJLENBQUNoZ0IsT0FBTyxJQUFJLCtEQUErRDtnQkFFL0UsTUFBTyxJQUFJLENBQUNELEtBQUssR0FBRzd2QixJQUFJLEtBQUssSUFBSztvQkFDaEMsOENBQThDO29CQUM5Qyt2QyxPQUFPenJDLElBQUksQ0FBQ3dyQztvQkFDWixJQUFJLENBQUNoZ0IsT0FBTztnQkFDZCxFQUFFLDhEQUE4RDtnQkFDaEUsa0NBQWtDO2dCQUdsQyxJQUFJLElBQUksQ0FBQ0QsS0FBSyxHQUFHN3ZCLElBQUksS0FBSyxLQUFLO29CQUM3Qit2QyxPQUFPenJDLElBQUksQ0FBQyxJQUFJLENBQUNpckMsa0JBQWtCLENBQUM7Z0JBQ3RDLEVBQUUscURBQXFEO2dCQUd2REssY0FBYztvQkFDWm50QyxNQUFNO29CQUNOOE8sTUFBTSxJQUFJLENBQUNBLElBQUk7b0JBQ2Y3TyxNQUFNcXRDO2dCQUNSO1lBQ0YsT0FBTyxJQUFJekIsWUFBWSxDQUFDM0QsSUFBSTNxQyxJQUFJLENBQUMsRUFBRTtnQkFDakMsZ0RBQWdEO2dCQUNoRCx3REFBd0Q7Z0JBQ3hELDBEQUEwRDtnQkFDMUQscURBQXFEO2dCQUNyRCxJQUFJZ0MsTUFBTXNzQyxZQUFZLENBQUMzRCxJQUFJM3FDLElBQUksQ0FBQztnQkFDaEMsSUFBSWd3QyxRQUFRM0IsZ0JBQWdCbjRCLElBQUksQ0FBQ3kwQixJQUFJM3FDLElBQUk7Z0JBQ3pDLElBQUksQ0FBQzh2QixPQUFPLElBQUksbURBQW1EO2dCQUVuRSxNQUFPLEtBQU07b0JBQ1gsSUFBSXh2QixRQUFRLElBQUksQ0FBQ3V2QixLQUFLLEdBQUc3dkIsSUFBSTtvQkFFN0IsSUFBSSxDQUFDc3VDLFlBQVksQ0FBQ2h1QyxNQUFNLEVBQUU7d0JBQ3hCO29CQUNGO29CQUVBLElBQUkrdEMsZ0JBQWdCbjRCLElBQUksQ0FBQzVWLFdBQVcwdkMsT0FBTzt3QkFDekM7b0JBQ0Y7b0JBRUEsSUFBSSxDQUFDbGdCLE9BQU87b0JBQ1o5dEIsT0FBT3NzQyxZQUFZLENBQUNodUMsTUFBTTtnQkFDNUIsRUFBRSxrQ0FBa0M7Z0JBR3BDLElBQUlvQyxPQUFPLElBQUlnc0MsT0FBTzFzQyxLQUFLLElBQUksQ0FBQzBqQixRQUFRLEVBQUVpcEIsS0FBSztnQkFFL0MsSUFBSXFCLE9BQU87b0JBQ1RILFlBQVk7d0JBQ1ZwdEMsTUFBTTt3QkFDTjhPLE1BQU07d0JBQ043TztvQkFDRjtnQkFDRixPQUFPO29CQUNMa3RDLGNBQWM7d0JBQ1pudEMsTUFBTTt3QkFDTjhPLE1BQU07d0JBQ043TztvQkFDRjtnQkFDRjtZQUNGLE9BQU87Z0JBRUw7WUFDRjtRQUNGLEVBQUUsd0VBQXdFO1FBQzFFLGlEQUFpRDtRQUdqRCxJQUFJa3RDLGVBQWVDLFdBQVc7WUFDNUIsK0RBQStEO1lBQy9ELE9BQU87Z0JBQ0xwdEMsTUFBTTtnQkFDTjhPLE1BQU0sSUFBSSxDQUFDQSxJQUFJO2dCQUNmNFgsTUFBTUE7Z0JBQ050aUIsS0FBSytvQztnQkFDTDdvQyxLQUFLOG9DO1lBQ1A7UUFDRixPQUFPO1lBQ0wscUNBQXFDO1lBQ3JDLE9BQU8xbUI7UUFDVDtJQUNGO0lBQ0E7O0dBRUMsR0FHRHFKLGNBQWNsQixnQkFBZ0IsRUFBRS93QixLQUFLLDhCQUE4QjtJQUEvQixFQUNsQztRQUNBLElBQUlELFFBQVEsSUFBSSxDQUFDdXZCLEtBQUs7UUFDdEIsSUFBSTZRLE9BQU9wZ0MsTUFBTU4sSUFBSTtRQUNyQixJQUFJaXdDLFdBQVdwRyxTQUFTLENBQUNuSixLQUFLO1FBRTlCLElBQUksQ0FBQ3VQLFVBQVU7WUFDYixPQUFPO1FBQ1Q7UUFFQSxJQUFJLENBQUNuZ0IsT0FBTyxJQUFJLHdCQUF3QjtRQUV4QyxJQUFJdnZCLFFBQVFBLFNBQVMsVUFBVSxDQUFDMHZDLFNBQVN4dkIsaUJBQWlCLEVBQUU7WUFDMUQsTUFBTSxJQUFJcmdCLFdBQVcsbUJBQW1Cc2dDLE9BQU8sd0JBQXlCbmdDLENBQUFBLE9BQU8sU0FBU0EsT0FBTyxFQUFDLEdBQUlEO1FBQ3RHLE9BQU8sSUFBSSxJQUFJLENBQUNpUixJQUFJLEtBQUssVUFBVSxDQUFDMCtCLFNBQVN2dkIsYUFBYSxFQUFFO1lBQzFELE1BQU0sSUFBSXRnQixXQUFXLHlCQUF5QnNnQyxPQUFPLGtCQUFrQnBnQztRQUN6RSxPQUFPLElBQUksSUFBSSxDQUFDaVIsSUFBSSxLQUFLLFVBQVUwK0IsU0FBU3R2QixhQUFhLEtBQUssT0FBTztZQUNuRSxNQUFNLElBQUl2Z0IsV0FBVyx5QkFBeUJzZ0MsT0FBTyxrQkFBa0JwZ0M7UUFDekU7UUFFQSxJQUFJLEVBQ0Z5ckIsSUFBSSxFQUNKTSxPQUFPLEVBQ1IsR0FBRyxJQUFJLENBQUNnVSxjQUFjLENBQUNLLE1BQU11UDtRQUM5QixPQUFPLElBQUksQ0FBQ2xoQixZQUFZLENBQUMyUixNQUFNM1UsTUFBTU0sU0FBUy9yQixPQUFPZ3hCO0lBQ3ZEO0lBQ0E7O0dBRUMsR0FHRHZDLGFBQWF4dUIsSUFBSSxFQUFFd3JCLElBQUksRUFBRU0sT0FBTyxFQUFFL3JCLEtBQUssRUFBRWd4QixnQkFBZ0IsRUFBRTtRQUN6RCxJQUFJL3FCLFVBQVU7WUFDWnlsQixVQUFVenJCO1lBQ1YwckIsUUFBUSxJQUFJO1lBQ1ozckI7WUFDQWd4QjtRQUNGO1FBQ0EsSUFBSW9QLE9BQU9tSixTQUFTLENBQUN0cEMsS0FBSztRQUUxQixJQUFJbWdDLFFBQVFBLEtBQUt0Z0IsT0FBTyxFQUFFO1lBQ3hCLE9BQU9zZ0IsS0FBS3RnQixPQUFPLENBQUM3WixTQUFTd2xCLE1BQU1NO1FBQ3JDLE9BQU87WUFDTCxNQUFNLElBQUlqc0IsV0FBVyw2QkFBNkJHO1FBQ3BEO0lBQ0Y7SUFDQTs7R0FFQyxHQUdEOC9CLGVBQWVLLElBQUksRUFDbkJ1UCxRQUFRLEVBQUU7UUFDUixJQUFJQyxZQUFZRCxTQUFTMXZCLE9BQU8sR0FBRzB2QixTQUFTcnZCLGVBQWU7UUFFM0QsSUFBSXN2QixjQUFjLEdBQUc7WUFDbkIsT0FBTztnQkFDTG5rQixNQUFNLEVBQUU7Z0JBQ1JNLFNBQVMsRUFBRTtZQUNiO1FBQ0Y7UUFFQSxJQUFJTixPQUFPLEVBQUU7UUFDYixJQUFJTSxVQUFVLEVBQUU7UUFFaEIsSUFBSyxJQUFJL2pCLElBQUksR0FBR0EsSUFBSTRuQyxXQUFXNW5DLElBQUs7WUFDbEMsSUFBSTZuQyxVQUFVRixTQUFTenZCLFFBQVEsSUFBSXl2QixTQUFTenZCLFFBQVEsQ0FBQ2xZLEVBQUU7WUFDdkQsSUFBSWtsQyxhQUFhbGxDLElBQUkybkMsU0FBU3J2QixlQUFlO1lBRTdDLElBQUlxdkIsU0FBU252QixTQUFTLElBQUlxdkIsV0FBVyxRQUFRLGtFQUFrRTtZQUMvR0YsU0FBU3h0QyxJQUFJLEtBQUssVUFBVTZGLE1BQU0sS0FBSytqQixPQUFPLENBQUMsRUFBRSxJQUFJLE1BQU07Z0JBQ3pEOGpCLFVBQVU7WUFDWjtZQUVBLElBQUlqdkIsTUFBTSxJQUFJLENBQUNrdkIsZ0JBQWdCLENBQUMsa0JBQWtCMVAsT0FBTyxLQUFLeVAsU0FBUzNDO1lBRXZFLElBQUlBLFlBQVk7Z0JBQ2RuaEIsUUFBUS9uQixJQUFJLENBQUM0YztZQUNmLE9BQU8sSUFBSUEsT0FBTyxNQUFNO2dCQUN0QjZLLEtBQUt6bkIsSUFBSSxDQUFDNGM7WUFDWixPQUFPO2dCQUNMLHdCQUF3QjtnQkFDeEIsTUFBTSxJQUFJOWdCLFdBQVc7WUFDdkI7UUFDRjtRQUVBLE9BQU87WUFDTDJyQjtZQUNBTTtRQUNGO0lBQ0Y7SUFDQTs7R0FFQyxHQUdEK2pCLGlCQUFpQjd2QyxJQUFJLEVBQUVrQyxJQUFJLEVBQUU0dEMsUUFBUSxFQUFFO1FBQ3JDLE9BQVE1dEM7WUFDTixLQUFLO2dCQUNILE9BQU8sSUFBSSxDQUFDNnRDLGVBQWUsQ0FBQ0Q7WUFFOUIsS0FBSztnQkFDSCxPQUFPLElBQUksQ0FBQzdlLGNBQWMsQ0FBQzZlO1lBRTdCLEtBQUs7Z0JBQ0gsT0FBTyxJQUFJLENBQUNFLGFBQWEsQ0FBQ0Y7WUFFNUIsS0FBSztZQUNMLEtBQUs7Z0JBQ0gsT0FBTyxJQUFJLENBQUNHLGtCQUFrQixDQUFDSCxVQUFVNXRDO1lBRTNDLEtBQUs7Z0JBQ0g7b0JBQ0UsNkRBQTZEO29CQUM3RCwrREFBK0Q7b0JBQy9ELElBQUlELFFBQVEsSUFBSSxDQUFDZ3VDLGtCQUFrQixDQUFDSCxVQUFVO29CQUM5QyxPQUFPN3RDLFNBQVMsT0FBTzt3QkFDckJDLE1BQU07d0JBQ044TyxNQUFNL08sTUFBTStPLElBQUk7d0JBQ2hCN08sTUFBTTs0QkFBQ0Y7eUJBQU07d0JBQ2JzTCxPQUFPLE9BQU8sc0JBQXNCO29CQUV0QyxJQUFJO2dCQUNOO1lBRUYsS0FBSztnQkFDSDtvQkFDRSxJQUFJeE4sUUFBUSxJQUFJLENBQUNtd0MsZ0JBQWdCLENBQUMsT0FBT0o7b0JBQ3pDLE9BQU8vdkMsU0FBUyxPQUFPO3dCQUNyQm1DLE1BQU07d0JBQ044TyxNQUFNO3dCQUNOOHhCLFFBQVEvaUMsTUFBTU4sSUFBSTtvQkFDcEIsSUFBSTtnQkFDTjtZQUVGLEtBQUs7Z0JBQ0g7b0JBQ0UsSUFBSXF3QyxVQUFVO3dCQUNaLE1BQU0sSUFBSWp3QyxXQUFXO29CQUN2QjtvQkFFQSxJQUFJMGtCLFNBQVMsSUFBSSxDQUFDMnFCLFVBQVUsQ0FBQ2x2QztvQkFFN0IsSUFBSXVrQixVQUFVLE1BQU07d0JBQ2xCLE1BQU0sSUFBSTFrQixXQUFXLHVCQUF1QkcsTUFBTSxJQUFJLENBQUNzdkIsS0FBSztvQkFDOUQ7b0JBRUEsT0FBTy9LO2dCQUNUO1lBRUYsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLampCO2dCQUNILE9BQU8sSUFBSSxDQUFDMnVDLGtCQUFrQixDQUFDSDtZQUVqQztnQkFDRSxNQUFNLElBQUlqd0MsV0FBVywyQkFBMkJHLE1BQU0sSUFBSSxDQUFDc3ZCLEtBQUs7UUFDcEU7SUFDRjtJQUNBOztHQUVDLEdBR0QwQyxnQkFBZ0I7UUFDZCxNQUFPLElBQUksQ0FBQzFDLEtBQUssR0FBRzd2QixJQUFJLEtBQUssSUFBSztZQUNoQyxJQUFJLENBQUM4dkIsT0FBTztRQUNkO0lBQ0Y7SUFDQTs7O0dBR0MsR0FHRDJnQixpQkFBaUJDLFFBQVEsRUFDekJMLFFBQVEsRUFBRTtRQUNSLElBQUlNLFdBQVcsSUFBSSxDQUFDbmhCLE1BQU0sQ0FBQytkLFlBQVksQ0FBQzhDO1FBRXhDLElBQUlNLFlBQVksTUFBTTtZQUNwQixPQUFPO1FBQ1Q7UUFFQSxJQUFJM3VDLE1BQU07UUFDVixJQUFJK3RCO1FBRUosTUFBTyxDQUFDQSxZQUFZLElBQUksQ0FBQ0YsS0FBSyxFQUFDLEVBQUc3dkIsSUFBSSxLQUFLLE1BQU87WUFDaERnQyxPQUFPK3RCLFVBQVUvdkIsSUFBSTtZQUNyQixJQUFJLENBQUM4dkIsT0FBTztRQUNkO1FBRUEsSUFBSSxDQUFDQSxPQUFPLElBQUksa0NBQWtDO1FBRWxENmdCLFNBQVMzd0MsSUFBSSxHQUFHZ0M7UUFDaEIsT0FBTzJ1QztJQUNUO0lBQ0E7Ozs7R0FJQyxHQUdEQyxnQkFBZ0JDLEtBQUssRUFBRUgsU0FBUywrQ0FBK0M7SUFBaEQsRUFDN0I7UUFDQSxJQUFJSSxhQUFhLElBQUksQ0FBQ2poQixLQUFLO1FBQzNCLElBQUlraEIsWUFBWUQ7UUFDaEIsSUFBSTl1QyxNQUFNO1FBQ1YsSUFBSSt0QjtRQUVKLE1BQU8sQ0FBQ0EsWUFBWSxJQUFJLENBQUNGLEtBQUssRUFBQyxFQUFHN3ZCLElBQUksS0FBSyxTQUFTNndDLE1BQU0zNkIsSUFBSSxDQUFDbFUsTUFBTSt0QixVQUFVL3ZCLElBQUksRUFBRztZQUNwRit3QyxZQUFZaGhCO1lBQ1ovdEIsT0FBTyt1QyxVQUFVL3dDLElBQUk7WUFDckIsSUFBSSxDQUFDOHZCLE9BQU87UUFDZDtRQUVBLElBQUk5dEIsUUFBUSxJQUFJO1lBQ2QsTUFBTSxJQUFJNUIsV0FBVyxhQUFhc3dDLFdBQVcsUUFBUUksV0FBVzl3QyxJQUFJLEdBQUcsS0FBSzh3QztRQUM5RTtRQUVBLE9BQU9BLFdBQVdueEMsS0FBSyxDQUFDb3hDLFdBQVcvdUM7SUFDckM7SUFDQTs7R0FFQyxHQUdEc3VDLGdCQUFnQkQsUUFBUSxFQUFFO1FBQ3hCLElBQUlwUixNQUFNLElBQUksQ0FBQ3dSLGdCQUFnQixDQUFDLFNBQVNKO1FBRXpDLElBQUlwUixPQUFPLE1BQU07WUFDZixPQUFPO1FBQ1Q7UUFFQSxJQUFJMzhCLFFBQVEseUNBQXlDWSxJQUFJLENBQUMrN0IsSUFBSWovQixJQUFJO1FBRWxFLElBQUksQ0FBQ3NDLE9BQU87WUFDVixNQUFNLElBQUlsQyxXQUFXLHFCQUFxQjYrQixJQUFJai9CLElBQUksR0FBRyxLQUFLaS9CO1FBQzVEO1FBRUEsSUFBSWg3QixRQUFRM0IsS0FBSyxDQUFDLEVBQUU7UUFFcEIsSUFBSSxpQkFBaUI0VCxJQUFJLENBQUNqUyxRQUFRO1lBQ2hDLDREQUE0RDtZQUM1RCxzREFBc0Q7WUFDdEQsK0RBQStEO1lBQy9EQSxRQUFRLE1BQU1BO1FBQ2hCO1FBRUEsT0FBTztZQUNMeEIsTUFBTTtZQUNOOE8sTUFBTSxJQUFJLENBQUNBLElBQUk7WUFDZnROO1FBQ0Y7SUFDRjtJQUNBOztHQUVDLEdBR0R1dEIsZUFBZTZlLFFBQVEsRUFBRTtRQUN2QixJQUFJcFI7UUFDSixJQUFJeUQsVUFBVSxPQUFPLHVDQUF1QztRQUU1RCxJQUFJLENBQUNsVCxNQUFNLENBQUMrQyxhQUFhO1FBRXpCLElBQUksQ0FBQzhkLFlBQVksSUFBSSxDQUFDN2dCLE1BQU0sQ0FBQytCLE1BQU0sR0FBR3Z4QixJQUFJLEtBQUssS0FBSztZQUNsRGkvQixNQUFNLElBQUksQ0FBQzJSLGVBQWUsQ0FBQyxtREFBbUQ7UUFDaEYsT0FBTztZQUNMM1IsTUFBTSxJQUFJLENBQUN3UixnQkFBZ0IsQ0FBQyxRQUFRSjtRQUN0QztRQUVBLElBQUksQ0FBQ3BSLEtBQUs7WUFDUixPQUFPO1FBQ1Q7UUFFQSxJQUFJLENBQUNvUixZQUFZcFIsSUFBSWovQixJQUFJLENBQUNTLE1BQU0sS0FBSyxHQUFHO1lBQ3RDLCtEQUErRDtZQUMvRCxzRUFBc0U7WUFDdEUsMEJBQTBCO1lBQzFCdytCLElBQUlqL0IsSUFBSSxHQUFHLE9BQU8sa0JBQWtCO1lBRXBDMGlDLFVBQVUsTUFBTSx5Q0FBeUM7UUFDM0Q7UUFFQSxJQUFJcGdDLFFBQVEsNkNBQTZDWSxJQUFJLENBQUMrN0IsSUFBSWovQixJQUFJO1FBRXRFLElBQUksQ0FBQ3NDLE9BQU87WUFDVixNQUFNLElBQUlsQyxXQUFXLG9CQUFvQjYrQixJQUFJai9CLElBQUksR0FBRyxLQUFLaS9CO1FBQzNEO1FBRUEsSUFBSTNzQixPQUFPO1lBQ1RxQyxRQUFRLENBQUVyUyxDQUFBQSxLQUFLLENBQUMsRUFBRSxHQUFHQSxLQUFLLENBQUMsRUFBRTtZQUM3QixtQ0FBbUM7WUFDbkMrUixNQUFNL1IsS0FBSyxDQUFDLEVBQUU7UUFDaEI7UUFFQSxJQUFJLENBQUM4UixVQUFVOUIsT0FBTztZQUNwQixNQUFNLElBQUlsUyxXQUFXLG9CQUFvQmtTLEtBQUsrQixJQUFJLEdBQUcsS0FBSzRxQjtRQUM1RDtRQUVBLE9BQU87WUFDTHg4QixNQUFNO1lBQ044TyxNQUFNLElBQUksQ0FBQ0EsSUFBSTtZQUNmek8sT0FBT3dQO1lBQ1Bvd0I7UUFDRjtJQUNGO0lBQ0E7OztHQUdDLEdBR0Q2TixjQUFjRixRQUFRLEVBQUU7UUFDdEIsSUFBSSxDQUFDN2dCLE1BQU0sQ0FBQ2h3QixLQUFLLENBQUNpckMsVUFBVSxDQUFDLEtBQUssS0FBSyxtQkFBbUI7UUFFMUQsSUFBSSxDQUFDamIsTUFBTSxDQUFDaHdCLEtBQUssQ0FBQ2lyQyxVQUFVLENBQUMsS0FBSyxLQUFLLGtCQUFrQjtRQUV6RCxJQUFJeEwsTUFBTSxJQUFJLENBQUN3UixnQkFBZ0IsQ0FBQyxPQUFPSjtRQUN2QyxJQUFJLENBQUM3Z0IsTUFBTSxDQUFDaHdCLEtBQUssQ0FBQ2lyQyxVQUFVLENBQUMsS0FBSyxLQUFLLG9CQUFvQjtRQUUzRCxJQUFJLENBQUNqYixNQUFNLENBQUNod0IsS0FBSyxDQUFDaXJDLFVBQVUsQ0FBQyxLQUFLLEtBQUssbUJBQW1CO1FBRTFELElBQUl4TCxPQUFPLE1BQU07WUFDZixPQUFPO1FBQ1QsRUFBRSxpRUFBaUU7UUFDbkUsMkRBQTJEO1FBQzNELGdFQUFnRTtRQUNoRSw0Q0FBNEM7UUFHNUMsSUFBSWo4QixNQUFNaThCLElBQUlqL0IsSUFBSSxDQUFDZSxPQUFPLENBQUMsb0JBQW9CO1FBQy9DLE9BQU87WUFDTDBCLE1BQU07WUFDTjhPLE1BQU0sSUFBSSxDQUFDQSxJQUFJO1lBQ2Z2TztRQUNGO0lBQ0Y7SUFDQTs7R0FFQyxHQUdEd3RDLG1CQUFtQkgsUUFBUSxFQUFFOStCLElBQUksRUFBRTtRQUNqQyxJQUFJby9CLFdBQVcsSUFBSSxDQUFDbmhCLE1BQU0sQ0FBQytkLFlBQVksQ0FBQzhDO1FBRXhDLElBQUlNLFlBQVksTUFBTTtZQUNwQixPQUFPO1FBQ1Q7UUFFQSxJQUFJck0sWUFBWSxJQUFJLENBQUMveUIsSUFBSTtRQUV6QixJQUFJQSxNQUFNO1lBQ1IsMkJBQTJCO1lBQzNCLElBQUksQ0FBQ2d6QixVQUFVLENBQUNoekI7UUFDbEI7UUFFQSxJQUFJLENBQUNpZSxNQUFNLENBQUNDLFVBQVU7UUFDdEIsSUFBSTlOLGFBQWEsSUFBSSxDQUFDZ08sZUFBZSxDQUFDLE9BQU8sUUFBUSxrREFBa0Q7UUFFdkcsSUFBSSxDQUFDcUksTUFBTSxDQUFDLFFBQVEsaUNBQWlDO1FBRXJELElBQUksQ0FBQ3hJLE1BQU0sQ0FBQ0ksUUFBUTtRQUNwQixJQUFJaE4sU0FBUztZQUNYbmdCLE1BQU07WUFDTjhPLE1BQU0sSUFBSSxDQUFDQSxJQUFJO1lBQ2Z6UixLQUFLNndDLFNBQVM3d0MsR0FBRztZQUNqQjRDLE1BQU1pZjtRQUNSO1FBRUEsSUFBSXBRLE1BQU07WUFDUixtQkFBbUI7WUFDbkIsSUFBSSxDQUFDZ3pCLFVBQVUsQ0FBQ0Q7UUFDbEI7UUFFQSxPQUFPMWhCO0lBQ1Q7SUFDQTs7Ozs7R0FLQyxHQUdENnNCLFdBQVdsdkMsSUFBSSxFQUNmK3dCLGdCQUFnQixFQUFFO1FBQ2hCLElBQUl3ZixhQUFhLElBQUksQ0FBQ2poQixLQUFLO1FBQzNCLElBQUk3dkIsT0FBTzh3QyxXQUFXOXdDLElBQUk7UUFDMUIsSUFBSTRpQixRQUFRLDRDQUE0QztRQUV4RCxJQUFJNWlCLFNBQVMsT0FBT0EsU0FBUyxnQkFBZ0I7WUFDM0MsSUFBSSxDQUFDOHZCLE9BQU87WUFDWixJQUFJa2hCLFdBQVdoeEMsU0FBUyxNQUFNLE1BQU07WUFDcEMsSUFBSSxDQUFDd3ZCLE1BQU0sQ0FBQ0MsVUFBVSxJQUFJLHlDQUF5QztZQUVuRSxJQUFJOU4sYUFBYSxJQUFJLENBQUNnTyxlQUFlLENBQUMsT0FBT3FoQjtZQUM3QyxJQUFJRCxZQUFZLElBQUksQ0FBQ2xoQixLQUFLO1lBQzFCLElBQUksQ0FBQ21JLE1BQU0sQ0FBQ2daLFdBQVcsNkNBQTZDO1lBRXBFLElBQUksQ0FBQ3hoQixNQUFNLENBQUNJLFFBQVE7WUFDcEJoTixTQUFTO2dCQUNQbmdCLE1BQU07Z0JBQ044TyxNQUFNLElBQUksQ0FBQ0EsSUFBSTtnQkFDZnpSLEtBQUtSLGVBQWVLLEtBQUssQ0FBQ214QyxZQUFZQztnQkFDdENydUMsTUFBTWlmO2dCQUNOLG1FQUFtRTtnQkFDbkUsbUVBQW1FO2dCQUNuRSxnRUFBZ0U7Z0JBQ2hFLG1DQUFtQztnQkFDbkN3a0IsWUFBWW5tQyxTQUFTLGtCQUFrQjZCO1lBQ3pDO1FBQ0YsT0FBTztZQUNMLGlFQUFpRTtZQUNqRSxtQ0FBbUM7WUFDbkMrZ0IsU0FBUyxJQUFJLENBQUM0UCxhQUFhLENBQUNsQixrQkFBa0Ivd0IsU0FBUyxJQUFJLENBQUMwd0MsV0FBVztZQUV2RSxJQUFJcnVCLFVBQVUsUUFBUTVpQixJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQ2l0QyxpQkFBaUJsbkMsY0FBYyxDQUFDL0YsT0FBTztnQkFDaEYsSUFBSSxJQUFJLENBQUMwbEIsUUFBUSxDQUFDOWhCLFlBQVksRUFBRTtvQkFDOUIsTUFBTSxJQUFJeEQsV0FBVyxpQ0FBaUNKLE1BQU04d0M7Z0JBQzlEO2dCQUVBbHVCLFNBQVMsSUFBSSxDQUFDd2dCLG9CQUFvQixDQUFDcGpDO2dCQUNuQyxJQUFJLENBQUM4dkIsT0FBTztZQUNkO1FBQ0Y7UUFFQSxPQUFPbE47SUFDVDtJQUNBOzs7Ozs7O0dBT0MsR0FHRG9zQixjQUFjeHNDLEtBQUssRUFBRTtRQUNuQixJQUFJNkMsSUFBSTdDLE1BQU0vQixNQUFNLEdBQUc7UUFFdkIsSUFBSyxJQUFJNkgsSUFBSSxHQUFHQSxJQUFJakQsR0FBRyxFQUFFaUQsRUFBRztZQUMxQixJQUFJNG9DLElBQUkxdUMsS0FBSyxDQUFDOEYsRUFBRSxFQUFFLHlEQUF5RDtZQUUzRSxJQUFJNm9DLElBQUlELEVBQUVseEMsSUFBSTtZQUVkLElBQUlteEMsTUFBTSxPQUFPM3VDLEtBQUssQ0FBQzhGLElBQUksRUFBRSxDQUFDdEksSUFBSSxLQUFLLEtBQUs7Z0JBQzFDLElBQUlzSSxJQUFJLElBQUlqRCxLQUFLN0MsS0FBSyxDQUFDOEYsSUFBSSxFQUFFLENBQUN0SSxJQUFJLEtBQUssS0FBSztvQkFDMUN3QyxNQUFNbVosTUFBTSxDQUFDclQsR0FBRyxHQUFHO3dCQUNqQjdGLE1BQU07d0JBQ044TyxNQUFNO3dCQUNOelIsS0FBS1IsZUFBZUssS0FBSyxDQUFDdXhDLEdBQUcxdUMsS0FBSyxDQUFDOEYsSUFBSSxFQUFFO3dCQUN6Q3RJLE1BQU07b0JBQ1I7b0JBQ0FxRixLQUFLO2dCQUNQLE9BQU87b0JBQ0w3QyxNQUFNbVosTUFBTSxDQUFDclQsR0FBRyxHQUFHO3dCQUNqQjdGLE1BQU07d0JBQ044TyxNQUFNO3dCQUNOelIsS0FBS1IsZUFBZUssS0FBSyxDQUFDdXhDLEdBQUcxdUMsS0FBSyxDQUFDOEYsSUFBSSxFQUFFO3dCQUN6Q3RJLE1BQU07b0JBQ1I7b0JBQ0FxRixLQUFLO2dCQUNQO1lBQ0Y7WUFFQSxJQUFJLENBQUM4ckMsTUFBTSxPQUFPQSxNQUFNLEdBQUUsS0FBTTN1QyxLQUFLLENBQUM4RixJQUFJLEVBQUUsQ0FBQ3RJLElBQUksS0FBS214QyxHQUFHO2dCQUN2RDN1QyxNQUFNbVosTUFBTSxDQUFDclQsR0FBRyxHQUFHO29CQUNqQjdGLE1BQU07b0JBQ044TyxNQUFNO29CQUNOelIsS0FBS1IsZUFBZUssS0FBSyxDQUFDdXhDLEdBQUcxdUMsS0FBSyxDQUFDOEYsSUFBSSxFQUFFO29CQUN6Q3RJLE1BQU1teEMsSUFBSUE7Z0JBQ1o7Z0JBQ0E5ckMsS0FBSztZQUNQO1FBQ0Y7SUFDRjtJQUNBOzs7R0FHQyxHQUdENHJDLGNBQWM7UUFDWixJQUFJRyxVQUFVLElBQUksQ0FBQ3ZoQixLQUFLO1FBQ3hCLElBQUk3dkIsT0FBT294QyxRQUFRcHhDLElBQUk7UUFFdkIsSUFBSSxtQkFBbUJrVyxJQUFJLENBQUNsVyxPQUFPO1lBQ2pDLElBQUksQ0FBQzh2QixPQUFPO1lBQ1osSUFBSTVPLE1BQU1saEIsS0FBS2MsS0FBSyxDQUFDO1lBQ3JCLElBQUk4b0MsT0FBTzFvQixJQUFJM0ksTUFBTSxDQUFDLE9BQU87WUFFN0IsSUFBSXF4QixNQUFNO2dCQUNSMW9CLE1BQU1BLElBQUlwZ0IsS0FBSyxDQUFDO1lBQ2xCLEVBQUUsNERBQTREO1lBQzlELHlCQUF5QjtZQUd6QixJQUFJb2dCLElBQUl6Z0IsTUFBTSxHQUFHLEtBQUt5Z0IsSUFBSTNJLE1BQU0sQ0FBQyxPQUFPMkksSUFBSXBnQixLQUFLLENBQUMsQ0FBQyxJQUFJO2dCQUNyRCxNQUFNLElBQUlWLFdBQVc7WUFDdkI7WUFFQThnQixNQUFNQSxJQUFJcGdCLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSw2QkFBNkI7WUFFckQsT0FBTztnQkFDTDJCLE1BQU07Z0JBQ044TyxNQUFNO2dCQUNON08sTUFBTXdlO2dCQUNOMG9CO1lBQ0Y7UUFDRixFQUFFLGlFQUFpRTtRQUNuRSxxRUFBcUU7UUFHckUsSUFBSTZFLGVBQWUxb0MsY0FBYyxDQUFDL0YsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDb1gsT0FBTyxDQUFDLElBQUksQ0FBQzdGLElBQUksQ0FBQyxDQUFDdlIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzFFLCtEQUErRDtZQUMvRCxJQUFJLElBQUksQ0FBQzBsQixRQUFRLENBQUM1Z0IsTUFBTSxJQUFJLElBQUksQ0FBQ3lNLElBQUksS0FBSyxRQUFRO2dCQUNoRCxJQUFJLENBQUNtVSxRQUFRLENBQUMxZixlQUFlLENBQUMseUJBQXlCLHNDQUF1Q2hHLElBQUksQ0FBQyxFQUFFLEdBQUcsZUFBZ0IsYUFBYW94QztZQUN2STtZQUVBcHhDLE9BQU95dUMsY0FBYyxDQUFDenVDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBR0EsS0FBS2MsS0FBSyxDQUFDO1FBQzlDLEVBQUUscUNBQXFDO1FBR3ZDLElBQUl3QixRQUFROG5DLGtDQUFrQ2xuQyxJQUFJLENBQUNsRDtRQUVuRCxJQUFJc0MsT0FBTztZQUNUdEMsT0FBT0EsS0FBSytqQyxTQUFTLENBQUMsR0FBR3poQyxNQUFNeWdCLEtBQUs7WUFFcEMsSUFBSS9pQixTQUFTLEtBQUs7Z0JBQ2hCQSxPQUFPLEtBQVUsbUNBQW1DO1lBQ3RELE9BQU8sSUFBSUEsU0FBUyxLQUFLO2dCQUN2QkEsT0FBTyxLQUFVLG1DQUFtQztZQUN0RDtRQUNGLEVBQUUsd0JBQXdCO1FBRzFCLElBQUltdUI7UUFFSixJQUFJL1csT0FBTyxDQUFDLElBQUksQ0FBQzdGLElBQUksQ0FBQyxDQUFDdlIsS0FBSyxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDMGxCLFFBQVEsQ0FBQzVnQixNQUFNLElBQUksSUFBSSxDQUFDeU0sSUFBSSxLQUFLLFVBQVU2SCxXQUFXM1gsT0FBTyxDQUFDekIsU0FBUyxHQUFHO2dCQUNqRixJQUFJLENBQUMwbEIsUUFBUSxDQUFDMWYsZUFBZSxDQUFDLHlCQUF5QixxQ0FBc0NoRyxJQUFJLENBQUMsRUFBRSxHQUFHLGVBQWdCLGFBQWFveEM7WUFDdEk7WUFFQSxJQUFJNXVDLFFBQVE0VSxPQUFPLENBQUMsSUFBSSxDQUFDN0YsSUFBSSxDQUFDLENBQUN2UixLQUFLLENBQUN3QyxLQUFLO1lBQzFDLElBQUkxQyxNQUFNUixlQUFlSyxLQUFLLENBQUN5eEM7WUFDL0IsSUFBSWxzQztZQUVKLElBQUlnUyxNQUFNblIsY0FBYyxDQUFDdkQsUUFBUTtnQkFDL0IsYUFBYTtnQkFDYixJQUFJbXJCLFNBQVNuckI7Z0JBQ2IwQyxJQUFJO29CQUNGekMsTUFBTTtvQkFDTjhPLE1BQU0sSUFBSSxDQUFDQSxJQUFJO29CQUNmb2M7b0JBQ0E3dEI7b0JBQ0FFO2dCQUNGO1lBQ0YsT0FBTztnQkFDTCxhQUFhO2dCQUNia0YsSUFBSTtvQkFDRnpDLE1BQU1EO29CQUNOK08sTUFBTSxJQUFJLENBQUNBLElBQUk7b0JBQ2Z6UjtvQkFDQUU7Z0JBQ0Y7WUFDRixFQUFFLGFBQWE7WUFHZm11QixTQUFTanBCO1FBQ1gsT0FBTyxJQUFJbEYsS0FBS3lSLFVBQVUsQ0FBQyxNQUFNLE1BQU07WUFDckMsdUJBQXVCO1lBQ3ZCLElBQUksSUFBSSxDQUFDaVUsUUFBUSxDQUFDNWdCLE1BQU0sRUFBRTtnQkFDeEIsSUFBSSxDQUFDK0QsbUJBQW1CN0ksS0FBS3lSLFVBQVUsQ0FBQyxLQUFLO29CQUMzQyxJQUFJLENBQUNpVSxRQUFRLENBQUMxZixlQUFlLENBQUMsaUJBQWlCLHFDQUFzQ2hHLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBUSxRQUFPQSxLQUFLeVIsVUFBVSxDQUFDLEtBQUssR0FBRSxHQUFJMi9CO2dCQUMzSSxPQUFPLElBQUksSUFBSSxDQUFDNy9CLElBQUksS0FBSyxRQUFRO29CQUMvQixJQUFJLENBQUNtVSxRQUFRLENBQUMxZixlQUFlLENBQUMseUJBQXlCLDZCQUE4QmhHLElBQUksQ0FBQyxFQUFFLEdBQUcsdUJBQXdCb3hDO2dCQUN6SDtZQUNGLEVBQUUsaUVBQWlFO1lBQ25FLDZEQUE2RDtZQUM3RCwrREFBK0Q7WUFDL0QsNkRBQTZEO1lBQzdELDREQUE0RDtZQUM1RCwrREFBK0Q7WUFDL0QsMENBQTBDO1lBRzFDampCLFNBQVM7Z0JBQ1AxckIsTUFBTTtnQkFDTjhPLE1BQU07Z0JBQ056UixLQUFLUixlQUFlSyxLQUFLLENBQUN5eEM7Z0JBQzFCcHhDO1lBQ0Y7UUFDRixPQUFPO1lBQ0wsT0FBTyxNQUFNLHdCQUF3QjtRQUN2QztRQUVBLElBQUksQ0FBQzh2QixPQUFPLElBQUksOENBQThDO1FBRTlELElBQUl4dEIsT0FBTztZQUNULElBQUssSUFBSWdHLElBQUksR0FBR0EsSUFBSWhHLEtBQUssQ0FBQyxFQUFFLENBQUM3QixNQUFNLEVBQUU2SCxJQUFLO2dCQUN4QyxJQUFJb1AsU0FBU3BWLEtBQUssQ0FBQyxFQUFFLENBQUNnRyxFQUFFO2dCQUV4QixJQUFJLENBQUNrbUMsY0FBYyxDQUFDOTJCLE9BQU8sRUFBRTtvQkFDM0IsTUFBTSxJQUFJdFgsV0FBVyxzQkFBc0JzWCxTQUFTLEtBQUswNUI7Z0JBQzNEO2dCQUVBLElBQUlqTyxVQUFVcUwsY0FBYyxDQUFDOTJCLE9BQU8sQ0FBQyxJQUFJLENBQUNuRyxJQUFJLENBQUMsSUFBSWk5QixjQUFjLENBQUM5MkIsT0FBTyxDQUFDMVgsSUFBSTtnQkFFOUUsSUFBSSxDQUFDbWpDLFNBQVM7b0JBQ1osTUFBTSxJQUFJL2lDLFdBQVcsWUFBWXNYLFNBQVMscUJBQXFCLElBQUksQ0FBQ25HLElBQUksR0FBRyxTQUFTNi9CO2dCQUN0RjtnQkFFQWpqQixTQUFTO29CQUNQMXJCLE1BQU07b0JBQ044TyxNQUFNLElBQUksQ0FBQ0EsSUFBSTtvQkFDZnpSLEtBQUtSLGVBQWVLLEtBQUssQ0FBQ3l4QztvQkFDMUI3akMsT0FBTzQxQjtvQkFDUDNYLFlBQVk7b0JBQ1pOLFVBQVU7b0JBQ1YsYUFBYTtvQkFDYi9CLE1BQU1nRjtnQkFDUjtZQUNGO1FBQ0YsRUFBRSxhQUFhO1FBR2YsT0FBT0E7SUFDVDtBQUVGO0FBQ0F1Z0IsT0FBT0ksZUFBZSxHQUFHO0lBQUM7SUFBSztJQUFjO0lBQVM7SUFBVztDQUFJO0FBRXJFOzs7Q0FHQyxHQUVEOztDQUVDLEdBQ0QsSUFBSXVDLFlBQVksU0FBU0EsVUFBVUMsT0FBTyxFQUFFNXJCLFFBQVE7SUFDbEQsSUFBSSxDQUFFLFFBQU80ckIsWUFBWSxZQUFZQSxtQkFBbUJqdkMsTUFBSyxHQUFJO1FBQy9ELE1BQU0sSUFBSWt2QyxVQUFVO0lBQ3RCO0lBRUEsSUFBSXRsQixTQUFTLElBQUl5aUIsT0FBTzRDLFNBQVM1ckIsV0FBVyxrRUFBa0U7SUFFOUcsT0FBT3VHLE9BQU91RCxNQUFNLENBQUN0ckIsTUFBTSxDQUFDK21DLE9BQU8sQ0FBQyxXQUFXO0lBQy9DLElBQUlwbkIsT0FBT29JLE9BQU8waUIsS0FBSyxJQUFJLDhFQUE4RTtJQUV6RyxPQUFPMWlCLE9BQU91RCxNQUFNLENBQUN0ckIsTUFBTSxDQUFDK21DLE9BQU8sQ0FBQyxrQkFBa0I7SUFDdEQsT0FBT2hmLE9BQU91RCxNQUFNLENBQUN0ckIsTUFBTSxDQUFDK21DLE9BQU8sQ0FBQyxVQUFVLEVBQUUsb0VBQW9FO0lBQ3BILCtEQUErRDtJQUUvRCxJQUFJaGYsT0FBT3VELE1BQU0sQ0FBQ3RyQixNQUFNLENBQUNpdUIsR0FBRyxDQUFDLGFBQWE7UUFDeEMsSUFBSSxDQUFDek0sU0FBU3JpQixXQUFXLEVBQUU7WUFDekIsTUFBTSxJQUFJakQsV0FBVztRQUN2QjtRQUVBeWpCLE9BQU87WUFBQztnQkFDTnBoQixNQUFNO2dCQUNOOE8sTUFBTTtnQkFDTjdPLE1BQU1taEI7Z0JBQ05DLEtBQUttSSxPQUFPK08sUUFBUSxDQUFDO29CQUFDLElBQUlqN0IsTUFBTTtpQkFBWTtZQUM5QztTQUFFO0lBQ0o7SUFFQSxPQUFPOGpCO0FBQ1Q7QUFFQSx1QkFBdUIsR0FFdkI7OztDQUdDLEdBQ0QsSUFBSTJ0QixTQUFTLFNBQVNBLE9BQU83dkIsVUFBVSxFQUFFOHZCLFFBQVEsRUFBRTVyQyxPQUFPO0lBQ3hENHJDLFNBQVNDLFdBQVcsR0FBRztJQUN2QixJQUFJdDhCLE9BQU91OEIsZ0JBQWdCaHdCLFlBQVk5YixTQUFTb0ksTUFBTTtJQUN0RHdqQyxTQUFTcGpDLFdBQVcsQ0FBQytHO0FBQ3ZCLEdBQUcsNkVBQTZFO0FBQ2hGLHFCQUFxQjtBQUdyQixJQUFJLE9BQU9qSCxhQUFhLGFBQWE7SUFDbkMsSUFBSUEsU0FBU3lqQyxVQUFVLEtBQUssY0FBYztRQUN4QyxPQUFPenJDLFlBQVksZUFBZUEsUUFBUUMsSUFBSSxDQUFDLGdFQUFnRTtRQUUvR29yQyxTQUFTLFNBQVNBO1lBQ2hCLE1BQU0sSUFBSXB4QyxXQUFXO1FBQ3ZCO0lBQ0Y7QUFDRjtBQUNBOztDQUVDLEdBR0QsSUFBSXl4QyxpQkFBaUIsU0FBU0EsZUFBZWx3QixVQUFVLEVBQUU5YixPQUFPO0lBQzlELElBQUkwSSxTQUFTb2pDLGdCQUFnQmh3QixZQUFZOWIsU0FBU3lJLFFBQVE7SUFDMUQsT0FBT0M7QUFDVDtBQUNBOztDQUVDLEdBR0QsSUFBSXVqQyxvQkFBb0IsU0FBU0Esa0JBQWtCbndCLFVBQVUsRUFBRTliLE9BQU87SUFDcEUsSUFBSTZmLFdBQVcsSUFBSTlmLFNBQVNDO0lBQzVCLE9BQU93ckMsVUFBVTF2QixZQUFZK0Q7QUFDL0I7QUFDQTs7OztDQUlDLEdBR0QsSUFBSXFzQixjQUFjLFNBQVNBLFlBQVlweEMsS0FBSyxFQUFFZ2hCLFVBQVUsRUFBRTliLE9BQU87SUFDL0QsSUFBSUEsUUFBUWpDLFlBQVksSUFBSSxDQUFFakQsQ0FBQUEsaUJBQWlCUCxVQUFTLEdBQUk7UUFDMUQsTUFBTU87SUFDUjtJQUVBLElBQUl5VSxPQUFPMkosWUFBWWpELFFBQVEsQ0FBQztRQUFDO0tBQWMsRUFBRTtRQUFDLElBQUk3RixXQUFXMEw7S0FBWTtJQUM3RXZNLEtBQUtHLFlBQVksQ0FBQyxTQUFTNVUsTUFBTXdZLFFBQVE7SUFDekMvRCxLQUFLRyxZQUFZLENBQUMsU0FBUyxXQUFXMVAsUUFBUTlCLFVBQVU7SUFDeEQsT0FBT3FSO0FBQ1Q7QUFDQTs7O0NBR0MsR0FHRCxJQUFJdThCLGtCQUFrQixTQUFTQSxnQkFBZ0Jod0IsVUFBVSxFQUFFOWIsT0FBTztJQUNoRSxJQUFJNmYsV0FBVyxJQUFJOWYsU0FBU0M7SUFFNUIsSUFBSTtRQUNGLElBQUlnZSxPQUFPd3RCLFVBQVUxdkIsWUFBWStEO1FBQ2pDLE9BQU9FLFVBQVUvQixNQUFNbEMsWUFBWStEO0lBQ3JDLEVBQUUsT0FBTy9rQixPQUFPO1FBQ2QsT0FBT294QyxZQUFZcHhDLE9BQU9naEIsWUFBWStEO0lBQ3hDO0FBQ0Y7QUFDQTs7O0NBR0MsR0FHRCxJQUFJc3NCLG1CQUFtQixTQUFTQSxpQkFBaUJyd0IsVUFBVSxFQUFFOWIsT0FBTztJQUNsRSxJQUFJNmYsV0FBVyxJQUFJOWYsU0FBU0M7SUFFNUIsSUFBSTtRQUNGLElBQUlnZSxPQUFPd3RCLFVBQVUxdkIsWUFBWStEO1FBQ2pDLE9BQU9NLGNBQWNuQyxNQUFNbEMsWUFBWStEO0lBQ3pDLEVBQUUsT0FBTy9rQixPQUFPO1FBQ2QsT0FBT294QyxZQUFZcHhDLE9BQU9naEIsWUFBWStEO0lBQ3hDO0FBQ0Y7QUFFQSxJQUFJdXNCLFFBQVE7SUFDVjs7R0FFQyxHQUNEQyxTQUFTO0lBRVQ7OztHQUdDLEdBQ0RWO0lBRUE7OztHQUdDLEdBQ0RLO0lBRUE7O0dBRUMsR0FDRHp4QztJQUVBOztHQUVDLEdBQ0RnRDtJQUVBOzs7Ozs7O0dBT0MsR0FDRCt1QyxTQUFTTDtJQUVUOzs7Ozs7O0dBT0MsR0FDRE0sbUJBQW1CVDtJQUVuQjs7Ozs7OztHQU9DLEdBQ0RVLG9CQUFvQkw7SUFFcEI7OztFQUdBLEdBQ0FNLGtCQUFrQnJoQztJQUVsQjs7R0FFQyxHQUNEc2hDLGdCQUFnQmw3QjtJQUVoQjs7OztHQUlDLEdBQ0RtN0Isa0JBQWtCeHlCO0lBRWxCOztHQUVDLEdBQ0R5eUIsZUFBZTFZO0lBRWY7Ozs7OztHQU1DLEdBQ0QyWSxXQUFXO1FBQ1RsOUI7UUFDQUc7UUFDQU07UUFDQU87UUFDQUk7UUFDQUc7SUFDRjtBQUNGO0FBRTRCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMva2F0ZXgvZGlzdC9rYXRleC5tanM/Nzk2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExleGluZyBvciBwYXJzaW5nIHBvc2l0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGVycm9yIHJlcG9ydGluZy5cbiAqIFRoaXMgb2JqZWN0IGlzIGltbXV0YWJsZS5cbiAqL1xuY2xhc3MgU291cmNlTG9jYXRpb24ge1xuICAvLyBUaGUgKyBwcmVmaXggaW5kaWNhdGVzIHRoYXQgdGhlc2UgZmllbGRzIGFyZW4ndCB3cml0ZWFibGVcbiAgLy8gTGV4ZXIgaG9sZGluZyB0aGUgaW5wdXQgc3RyaW5nLlxuICAvLyBTdGFydCBvZmZzZXQsIHplcm8tYmFzZWQgaW5jbHVzaXZlLlxuICAvLyBFbmQgb2Zmc2V0LCB6ZXJvLWJhc2VkIGV4Y2x1c2l2ZS5cbiAgY29uc3RydWN0b3IobGV4ZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLmxleGVyID0gdm9pZCAwO1xuICAgIHRoaXMuc3RhcnQgPSB2b2lkIDA7XG4gICAgdGhpcy5lbmQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuICAvKipcbiAgICogTWVyZ2VzIHR3byBgU291cmNlTG9jYXRpb25gcyBmcm9tIGxvY2F0aW9uIHByb3ZpZGVycywgZ2l2ZW4gdGhleSBhcmVcbiAgICogcHJvdmlkZWQgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZS5cbiAgICogLSBSZXR1cm5zIHRoZSBmaXJzdCBvbmUncyBsb2NhdGlvbiBpZiBvbmx5IHRoZSBmaXJzdCBpcyBwcm92aWRlZC5cbiAgICogLSBSZXR1cm5zIGEgbWVyZ2VkIHJhbmdlIG9mIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgaWYgYm90aCBhcmUgcHJvdmlkZWRcbiAgICogICBhbmQgdGhlaXIgbGV4ZXJzIG1hdGNoLlxuICAgKiAtIE90aGVyd2lzZSwgcmV0dXJucyBudWxsLlxuICAgKi9cblxuXG4gIHN0YXRpYyByYW5nZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgaWYgKCFzZWNvbmQpIHtcbiAgICAgIHJldHVybiBmaXJzdCAmJiBmaXJzdC5sb2M7XG4gICAgfSBlbHNlIGlmICghZmlyc3QgfHwgIWZpcnN0LmxvYyB8fCAhc2Vjb25kLmxvYyB8fCBmaXJzdC5sb2MubGV4ZXIgIT09IHNlY29uZC5sb2MubGV4ZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFNvdXJjZUxvY2F0aW9uKGZpcnN0LmxvYy5sZXhlciwgZmlyc3QubG9jLnN0YXJ0LCBzZWNvbmQubG9jLmVuZCk7XG4gICAgfVxuICB9XG5cbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgcmVxdWlyZWQgdG8gYnJlYWsgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIFRva2VuLCBMZXhlciwgYW5kXG4gKiBQYXJzZUVycm9yLlxuICovXG5cbi8qKlxuICogVGhlIHJlc3VsdGluZyB0b2tlbiByZXR1cm5lZCBmcm9tIGBsZXhgLlxuICpcbiAqIEl0IGNvbnNpc3RzIG9mIHRoZSB0b2tlbiB0ZXh0IHBsdXMgc29tZSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAqIFRoZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWxseSBhIHJhbmdlIGluIGFuIGlucHV0IHN0cmluZyxcbiAqIGJ1dCBpbnN0ZWFkIG9mIHJlZmVyZW5jaW5nIHRoZSBiYXJlIGlucHV0IHN0cmluZywgd2UgcmVmZXIgdG8gdGhlIGxleGVyLlxuICogVGhhdCB3YXkgaXQgaXMgcG9zc2libGUgdG8gYXR0YWNoIGV4dHJhIG1ldGFkYXRhIHRvIHRoZSBpbnB1dCBzdHJpbmcsXG4gKiBsaWtlIGZvciBleGFtcGxlIGEgZmlsZSBuYW1lIG9yIHNpbWlsYXIuXG4gKlxuICogVGhlIHBvc2l0aW9uIGluZm9ybWF0aW9uIGlzIG9wdGlvbmFsLCBzbyBpdCBpcyBPSyB0byBjb25zdHJ1Y3Qgc3ludGhldGljXG4gKiB0b2tlbnMgaWYgYXBwcm9wcmlhdGUuIE5vdCBwcm92aWRpbmcgYXZhaWxhYmxlIHBvc2l0aW9uIGluZm9ybWF0aW9uIG1heVxuICogbGVhZCB0byBkZWdyYWRlZCBlcnJvciByZXBvcnRpbmcsIHRob3VnaC5cbiAqL1xuY2xhc3MgVG9rZW4ge1xuICAvLyBkb24ndCBleHBhbmQgdGhlIHRva2VuXG4gIC8vIHVzZWQgaW4gXFxub2V4cGFuZFxuICBjb25zdHJ1Y3Rvcih0ZXh0LCAvLyB0aGUgdGV4dCBvZiB0aGlzIHRva2VuXG4gIGxvYykge1xuICAgIHRoaXMudGV4dCA9IHZvaWQgMDtcbiAgICB0aGlzLmxvYyA9IHZvaWQgMDtcbiAgICB0aGlzLm5vZXhwYW5kID0gdm9pZCAwO1xuICAgIHRoaXMudHJlYXRBc1JlbGF4ID0gdm9pZCAwO1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5sb2MgPSBsb2M7XG4gIH1cbiAgLyoqXG4gICAqIEdpdmVuIGEgcGFpciBvZiB0b2tlbnMgKHRoaXMgYW5kIGVuZFRva2VuKSwgY29tcHV0ZSBhIGBUb2tlbmAgZW5jb21wYXNzaW5nXG4gICAqIHRoZSB3aG9sZSBpbnB1dCByYW5nZSBlbmNsb3NlZCBieSB0aGVzZSB0d28uXG4gICAqL1xuXG5cbiAgcmFuZ2UoZW5kVG9rZW4sIC8vIGxhc3QgdG9rZW4gb2YgdGhlIHJhbmdlLCBpbmNsdXNpdmVcbiAgdGV4dCAvLyB0aGUgdGV4dCBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgdG9rZW5cbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbih0ZXh0LCBTb3VyY2VMb2NhdGlvbi5yYW5nZSh0aGlzLCBlbmRUb2tlbikpO1xuICB9XG5cbn1cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBQYXJzZUVycm9yIGNsYXNzLCB3aGljaCBpcyB0aGUgbWFpbiBlcnJvciB0aHJvd24gYnkgS2FUZVhcbiAqIGZ1bmN0aW9ucyB3aGVuIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZy4gVGhpcyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGludGVybmFsXG4gKiBlcnJvcnMgZnJvbSBlcnJvcnMgaW4gdGhlIGV4cHJlc3Npb24gdGhhdCB0aGUgdXNlciBwcm92aWRlZC5cbiAqXG4gKiBJZiBwb3NzaWJsZSwgYSBjYWxsZXIgc2hvdWxkIHByb3ZpZGUgYSBUb2tlbiBvciBQYXJzZU5vZGUgd2l0aCBpbmZvcm1hdGlvblxuICogYWJvdXQgd2hlcmUgaW4gdGhlIHNvdXJjZSBzdHJpbmcgdGhlIHByb2JsZW0gb2NjdXJyZWQuXG4gKi9cbmNsYXNzIFBhcnNlRXJyb3Ige1xuICAvLyBFcnJvciBzdGFydCBwb3NpdGlvbiBiYXNlZCBvbiBwYXNzZWQtaW4gVG9rZW4gb3IgUGFyc2VOb2RlLlxuICAvLyBMZW5ndGggb2YgYWZmZWN0ZWQgdGV4dCBiYXNlZCBvbiBwYXNzZWQtaW4gVG9rZW4gb3IgUGFyc2VOb2RlLlxuICAvLyBUaGUgdW5kZXJseWluZyBlcnJvciBtZXNzYWdlIHdpdGhvdXQgYW55IGNvbnRleHQgYWRkZWQuXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIC8vIFRoZSBlcnJvciBtZXNzYWdlXG4gIHRva2VuIC8vIEFuIG9iamVjdCBwcm92aWRpbmcgcG9zaXRpb24gaW5mb3JtYXRpb25cbiAgKSB7XG4gICAgdGhpcy5uYW1lID0gdm9pZCAwO1xuICAgIHRoaXMucG9zaXRpb24gPSB2b2lkIDA7XG4gICAgdGhpcy5sZW5ndGggPSB2b2lkIDA7XG4gICAgdGhpcy5yYXdNZXNzYWdlID0gdm9pZCAwO1xuICAgIHZhciBlcnJvciA9IFwiS2FUZVggcGFyc2UgZXJyb3I6IFwiICsgbWVzc2FnZTtcbiAgICB2YXIgc3RhcnQ7XG4gICAgdmFyIGVuZDtcbiAgICB2YXIgbG9jID0gdG9rZW4gJiYgdG9rZW4ubG9jO1xuXG4gICAgaWYgKGxvYyAmJiBsb2Muc3RhcnQgPD0gbG9jLmVuZCkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSB0aGUgaW5wdXQgYW5kIGEgcG9zaXRpb24sIG1ha2UgdGhlIGVycm9yIGEgYml0IGZhbmNpZXJcbiAgICAgIC8vIEdldCB0aGUgaW5wdXRcbiAgICAgIHZhciBpbnB1dCA9IGxvYy5sZXhlci5pbnB1dDsgLy8gUHJlcGVuZCBzb21lIGluZm9ybWF0aW9uXG5cbiAgICAgIHN0YXJ0ID0gbG9jLnN0YXJ0O1xuICAgICAgZW5kID0gbG9jLmVuZDtcblxuICAgICAgaWYgKHN0YXJ0ID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgZXJyb3IgKz0gXCIgYXQgZW5kIG9mIGlucHV0OiBcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yICs9IFwiIGF0IHBvc2l0aW9uIFwiICsgKHN0YXJ0ICsgMSkgKyBcIjogXCI7XG4gICAgICB9IC8vIFVuZGVybGluZSB0b2tlbiBpbiBxdWVzdGlvbiB1c2luZyBjb21iaW5pbmcgdW5kZXJzY29yZXNcblxuXG4gICAgICB2YXIgdW5kZXJsaW5lZCA9IGlucHV0LnNsaWNlKHN0YXJ0LCBlbmQpLnJlcGxhY2UoL1teXS9nLCBcIiQmXFx1MDMzMlwiKTsgLy8gRXh0cmFjdCBzb21lIGNvbnRleHQgZnJvbSB0aGUgaW5wdXQgYW5kIGFkZCBpdCB0byB0aGUgZXJyb3JcblxuICAgICAgdmFyIGxlZnQ7XG5cbiAgICAgIGlmIChzdGFydCA+IDE1KSB7XG4gICAgICAgIGxlZnQgPSBcIuKAplwiICsgaW5wdXQuc2xpY2Uoc3RhcnQgLSAxNSwgc3RhcnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IGlucHV0LnNsaWNlKDAsIHN0YXJ0KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJpZ2h0O1xuXG4gICAgICBpZiAoZW5kICsgMTUgPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgcmlnaHQgPSBpbnB1dC5zbGljZShlbmQsIGVuZCArIDE1KSArIFwi4oCmXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByaWdodCA9IGlucHV0LnNsaWNlKGVuZCk7XG4gICAgICB9XG5cbiAgICAgIGVycm9yICs9IGxlZnQgKyB1bmRlcmxpbmVkICsgcmlnaHQ7XG4gICAgfSAvLyBTb21lIGhhY2tlcnkgdG8gbWFrZSBQYXJzZUVycm9yIGEgcHJvdG90eXBlIG9mIEVycm9yXG4gICAgLy8gU2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzg0NjA3NTNcbiAgICAvLyAkRmxvd0ZpeE1lXG5cblxuICAgIHZhciBzZWxmID0gbmV3IEVycm9yKGVycm9yKTtcbiAgICBzZWxmLm5hbWUgPSBcIlBhcnNlRXJyb3JcIjsgLy8gJEZsb3dGaXhNZVxuXG4gICAgc2VsZi5fX3Byb3RvX18gPSBQYXJzZUVycm9yLnByb3RvdHlwZTtcbiAgICBzZWxmLnBvc2l0aW9uID0gc3RhcnQ7XG5cbiAgICBpZiAoc3RhcnQgIT0gbnVsbCAmJiBlbmQgIT0gbnVsbCkge1xuICAgICAgc2VsZi5sZW5ndGggPSBlbmQgLSBzdGFydDtcbiAgICB9XG5cbiAgICBzZWxmLnJhd01lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHJldHVybiBzZWxmO1xuICB9XG5cbn0gLy8gJEZsb3dGaXhNZSBNb3JlIGhhY2tlcnlcblxuXG5QYXJzZUVycm9yLnByb3RvdHlwZS5fX3Byb3RvX18gPSBFcnJvci5wcm90b3R5cGU7XG5cbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyB3aGljaCBhcmUgdXNlZnVsIGluIG90aGVyXG4gKiBmaWxlcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGFuIGVsZW1lbnQgaXMgY29udGFpbmVkIGluIGEgbGlzdFxuICovXG52YXIgY29udGFpbnMgPSBmdW5jdGlvbiBjb250YWlucyhsaXN0LCBlbGVtKSB7XG4gIHJldHVybiBsaXN0LmluZGV4T2YoZWxlbSkgIT09IC0xO1xufTtcbi8qKlxuICogUHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUgaWYgYSBzZXR0aW5nIGlzIHVuZGVmaW5lZFxuICogTk9URTogQ291bGRuJ3QgdXNlIGBUYCBhcyB0aGUgb3V0cHV0IHR5cGUgZHVlIHRvIGZhY2Vib29rL2Zsb3cjNTAyMi5cbiAqL1xuXG5cbnZhciBkZWZsdCA9IGZ1bmN0aW9uIGRlZmx0KHNldHRpbmcsIGRlZmF1bHRJZlVuZGVmaW5lZCkge1xuICByZXR1cm4gc2V0dGluZyA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdElmVW5kZWZpbmVkIDogc2V0dGluZztcbn07IC8vIGh5cGhlbmF0ZSBhbmQgZXNjYXBlIGFkYXB0ZWQgZnJvbSBGYWNlYm9vaydzIFJlYWN0IHVuZGVyIEFwYWNoZSAyIGxpY2Vuc2VcblxuXG52YXIgdXBwZXJjYXNlID0gLyhbQS1aXSkvZztcblxudmFyIGh5cGhlbmF0ZSA9IGZ1bmN0aW9uIGh5cGhlbmF0ZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKHVwcGVyY2FzZSwgXCItJDFcIikudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBFU0NBUEVfTE9PS1VQID0ge1xuICBcIiZcIjogXCImYW1wO1wiLFxuICBcIj5cIjogXCImZ3Q7XCIsXG4gIFwiPFwiOiBcIiZsdDtcIixcbiAgXCJcXFwiXCI6IFwiJnF1b3Q7XCIsXG4gIFwiJ1wiOiBcIiYjeDI3O1wiXG59O1xudmFyIEVTQ0FQRV9SRUdFWCA9IC9bJj48XCInXS9nO1xuLyoqXG4gKiBFc2NhcGVzIHRleHQgdG8gcHJldmVudCBzY3JpcHRpbmcgYXR0YWNrcy5cbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGUodGV4dCkge1xuICByZXR1cm4gU3RyaW5nKHRleHQpLnJlcGxhY2UoRVNDQVBFX1JFR0VYLCBtYXRjaCA9PiBFU0NBUEVfTE9PS1VQW21hdGNoXSk7XG59XG4vKipcbiAqIFNvbWV0aW1lcyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBpbm5lcm1vc3QgZWxlbWVudCBvZiBhIGdyb3VwLiBJbiBtb3N0XG4gKiBjYXNlcywgdGhpcyB3aWxsIGp1c3QgYmUgdGhlIGdyb3VwIGl0c2VsZiwgYnV0IHdoZW4gb3JkZ3JvdXBzIGFuZCBjb2xvcnMgaGF2ZVxuICogYSBzaW5nbGUgZWxlbWVudCwgd2Ugd2FudCB0byBwdWxsIHRoYXQgb3V0LlxuICovXG5cblxudmFyIGdldEJhc2VFbGVtID0gZnVuY3Rpb24gZ2V0QmFzZUVsZW0oZ3JvdXApIHtcbiAgaWYgKGdyb3VwLnR5cGUgPT09IFwib3JkZ3JvdXBcIikge1xuICAgIGlmIChncm91cC5ib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHlbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09IFwiY29sb3JcIikge1xuICAgIGlmIChncm91cC5ib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHlbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09IFwiZm9udFwiKSB7XG4gICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxufTtcbi8qKlxuICogVGVYYm9vayBhbGdvcml0aG1zIG9mdGVuIHJlZmVyZW5jZSBcImNoYXJhY3RlciBib3hlc1wiLCB3aGljaCBhcmUgc2ltcGx5IGdyb3Vwc1xuICogd2l0aCBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gdGhlbS4gVG8gZGVjaWRlIGlmIHNvbWV0aGluZyBpcyBhIGNoYXJhY3RlciBib3gsXG4gKiB3ZSBmaW5kIGl0cyBpbm5lcm1vc3QgZ3JvdXAsIGFuZCBzZWUgaWYgaXQgaXMgYSBzaW5nbGUgY2hhcmFjdGVyLlxuICovXG5cblxudmFyIGlzQ2hhcmFjdGVyQm94ID0gZnVuY3Rpb24gaXNDaGFyYWN0ZXJCb3goZ3JvdXApIHtcbiAgdmFyIGJhc2VFbGVtID0gZ2V0QmFzZUVsZW0oZ3JvdXApOyAvLyBUaGVzZSBhcmUgYWxsIHRoZXkgdHlwZXMgb2YgZ3JvdXBzIHdoaWNoIGhvbGQgc2luZ2xlIGNoYXJhY3RlcnNcblxuICByZXR1cm4gYmFzZUVsZW0udHlwZSA9PT0gXCJtYXRob3JkXCIgfHwgYmFzZUVsZW0udHlwZSA9PT0gXCJ0ZXh0b3JkXCIgfHwgYmFzZUVsZW0udHlwZSA9PT0gXCJhdG9tXCI7XG59O1xuXG52YXIgYXNzZXJ0ID0gZnVuY3Rpb24gYXNzZXJ0KHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG5vbi1udWxsLCBidXQgZ290ICcgKyBTdHJpbmcodmFsdWUpKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG4vKipcbiAqIFJldHVybiB0aGUgcHJvdG9jb2wgb2YgYSBVUkwsIG9yIFwiX3JlbGF0aXZlXCIgaWYgdGhlIFVSTCBkb2VzIG5vdCBzcGVjaWZ5IGFcbiAqIHByb3RvY29sIChhbmQgdGh1cyBpcyByZWxhdGl2ZSkuXG4gKi9cblxudmFyIHByb3RvY29sRnJvbVVybCA9IGZ1bmN0aW9uIHByb3RvY29sRnJvbVVybCh1cmwpIHtcbiAgdmFyIHByb3RvY29sID0gL15cXHMqKFteXFxcXC8jXSo/KSg/Ojp8JiMwKjU4fCYjeDAqM2EpL2kuZXhlYyh1cmwpO1xuICByZXR1cm4gcHJvdG9jb2wgIT0gbnVsbCA/IHByb3RvY29sWzFdIDogXCJfcmVsYXRpdmVcIjtcbn07XG52YXIgdXRpbHMgPSB7XG4gIGNvbnRhaW5zLFxuICBkZWZsdCxcbiAgZXNjYXBlLFxuICBoeXBoZW5hdGUsXG4gIGdldEJhc2VFbGVtLFxuICBpc0NoYXJhY3RlckJveCxcbiAgcHJvdG9jb2xGcm9tVXJsXG59O1xuXG4vKiBlc2xpbnQgbm8tY29uc29sZTowICovXG4vLyBUT0RPOiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGRvY3VtZW50YXRpb25cbi8vIFRPRE86IGNoZWNrIGFsbCBwcm9wZXJ0aWVzIG9uIFNldHRpbmdzIGV4aXN0XG4vLyBUT0RPOiBjaGVjayB0aGUgdHlwZSBvZiBhIHByb3BlcnR5IG9uIFNldHRpbmdzIG1hdGNoZXNcbnZhciBTRVRUSU5HU19TQ0hFTUEgPSB7XG4gIGRpc3BsYXlNb2RlOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVzY3JpcHRpb246IFwiUmVuZGVyIG1hdGggaW4gZGlzcGxheSBtb2RlLCB3aGljaCBwdXRzIHRoZSBtYXRoIGluIFwiICsgXCJkaXNwbGF5IHN0eWxlIChzbyBcXFxcaW50IGFuZCBcXFxcc3VtIGFyZSBsYXJnZSwgZm9yIGV4YW1wbGUpLCBhbmQgXCIgKyBcImNlbnRlcnMgdGhlIG1hdGggb24gdGhlIHBhZ2Ugb24gaXRzIG93biBsaW5lLlwiLFxuICAgIGNsaTogXCItZCwgLS1kaXNwbGF5LW1vZGVcIlxuICB9LFxuICBvdXRwdXQ6IHtcbiAgICB0eXBlOiB7XG4gICAgICBlbnVtOiBbXCJodG1sQW5kTWF0aG1sXCIsIFwiaHRtbFwiLCBcIm1hdGhtbFwiXVxuICAgIH0sXG4gICAgZGVzY3JpcHRpb246IFwiRGV0ZXJtaW5lcyB0aGUgbWFya3VwIGxhbmd1YWdlIG9mIHRoZSBvdXRwdXQuXCIsXG4gICAgY2xpOiBcIi1GLCAtLWZvcm1hdCA8dHlwZT5cIlxuICB9LFxuICBsZXFubzoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlJlbmRlciBkaXNwbGF5IG1hdGggaW4gbGVxbm8gc3R5bGUgKGxlZnQtanVzdGlmaWVkIHRhZ3MpLlwiXG4gIH0sXG4gIGZsZXFuOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVzY3JpcHRpb246IFwiUmVuZGVyIGRpc3BsYXkgbWF0aCBmbHVzaCBsZWZ0LlwiXG4gIH0sXG4gIHRocm93T25FcnJvcjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgY2xpOiBcIi10LCAtLW5vLXRocm93LW9uLWVycm9yXCIsXG4gICAgY2xpRGVzY3JpcHRpb246IFwiUmVuZGVyIGVycm9ycyAoaW4gdGhlIGNvbG9yIGdpdmVuIGJ5IC0tZXJyb3ItY29sb3IpIGluc1wiICsgXCJ0ZWFkIG9mIHRocm93aW5nIGEgUGFyc2VFcnJvciBleGNlcHRpb24gd2hlbiBlbmNvdW50ZXJpbmcgYW4gZXJyb3IuXCJcbiAgfSxcbiAgZXJyb3JDb2xvcjoge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgZGVmYXVsdDogXCIjY2MwMDAwXCIsXG4gICAgY2xpOiBcIi1jLCAtLWVycm9yLWNvbG9yIDxjb2xvcj5cIixcbiAgICBjbGlEZXNjcmlwdGlvbjogXCJBIGNvbG9yIHN0cmluZyBnaXZlbiBpbiB0aGUgZm9ybWF0ICdyZ2InIG9yICdycmdnYmInIFwiICsgXCIobm8gIykuIFRoaXMgb3B0aW9uIGRldGVybWluZXMgdGhlIGNvbG9yIG9mIGVycm9ycyByZW5kZXJlZCBieSB0aGUgXCIgKyBcIi10IG9wdGlvbi5cIixcbiAgICBjbGlQcm9jZXNzb3I6IGNvbG9yID0+IFwiI1wiICsgY29sb3JcbiAgfSxcbiAgbWFjcm9zOiB7XG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBjbGk6IFwiLW0sIC0tbWFjcm8gPGRlZj5cIixcbiAgICBjbGlEZXNjcmlwdGlvbjogXCJEZWZpbmUgY3VzdG9tIG1hY3JvIG9mIHRoZSBmb3JtICdcXFxcZm9vOmV4cGFuc2lvbicgKHVzZSBcIiArIFwibXVsdGlwbGUgLW0gYXJndW1lbnRzIGZvciBtdWx0aXBsZSBtYWNyb3MpLlwiLFxuICAgIGNsaURlZmF1bHQ6IFtdLFxuICAgIGNsaVByb2Nlc3NvcjogKGRlZiwgZGVmcykgPT4ge1xuICAgICAgZGVmcy5wdXNoKGRlZik7XG4gICAgICByZXR1cm4gZGVmcztcbiAgICB9XG4gIH0sXG4gIG1pblJ1bGVUaGlja25lc3M6IHtcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlNwZWNpZmllcyBhIG1pbmltdW0gdGhpY2tuZXNzLCBpbiBlbXMsIGZvciBmcmFjdGlvbiBsaW5lcyxcIiArIFwiIGBcXFxcc3FydGAgdG9wIGxpbmVzLCBge2FycmF5fWAgdmVydGljYWwgbGluZXMsIGBcXFxcaGxpbmVgLCBcIiArIFwiYFxcXFxoZGFzaGxpbmVgLCBgXFxcXHVuZGVybGluZWAsIGBcXFxcb3ZlcmxpbmVgLCBhbmQgdGhlIGJvcmRlcnMgb2YgXCIgKyBcImBcXFxcZmJveGAsIGBcXFxcYm94ZWRgLCBhbmQgYFxcXFxmY29sb3Jib3hgLlwiLFxuICAgIHByb2Nlc3NvcjogdCA9PiBNYXRoLm1heCgwLCB0KSxcbiAgICBjbGk6IFwiLS1taW4tcnVsZS10aGlja25lc3MgPHNpemU+XCIsXG4gICAgY2xpUHJvY2Vzc29yOiBwYXJzZUZsb2F0XG4gIH0sXG4gIGNvbG9ySXNUZXh0Q29sb3I6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZXNjcmlwdGlvbjogXCJNYWtlcyBcXFxcY29sb3IgYmVoYXZlIGxpa2UgTGFUZVgncyAyLWFyZ3VtZW50IFxcXFx0ZXh0Y29sb3IsIFwiICsgXCJpbnN0ZWFkIG9mIExhVGVYJ3Mgb25lLWFyZ3VtZW50IFxcXFxjb2xvciBtb2RlIGNoYW5nZS5cIixcbiAgICBjbGk6IFwiLWIsIC0tY29sb3ItaXMtdGV4dC1jb2xvclwiXG4gIH0sXG4gIHN0cmljdDoge1xuICAgIHR5cGU6IFt7XG4gICAgICBlbnVtOiBbXCJ3YXJuXCIsIFwiaWdub3JlXCIsIFwiZXJyb3JcIl1cbiAgICB9LCBcImJvb2xlYW5cIiwgXCJmdW5jdGlvblwiXSxcbiAgICBkZXNjcmlwdGlvbjogXCJUdXJuIG9uIHN0cmljdCAvIExhVGVYIGZhaXRoZnVsbmVzcyBtb2RlLCB3aGljaCB0aHJvd3MgYW4gXCIgKyBcImVycm9yIGlmIHRoZSBpbnB1dCB1c2VzIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgTGFUZVguXCIsXG4gICAgY2xpOiBcIi1TLCAtLXN0cmljdFwiLFxuICAgIGNsaURlZmF1bHQ6IGZhbHNlXG4gIH0sXG4gIHRydXN0OiB7XG4gICAgdHlwZTogW1wiYm9vbGVhblwiLCBcImZ1bmN0aW9uXCJdLFxuICAgIGRlc2NyaXB0aW9uOiBcIlRydXN0IHRoZSBpbnB1dCwgZW5hYmxpbmcgYWxsIEhUTUwgZmVhdHVyZXMgc3VjaCBhcyBcXFxcdXJsLlwiLFxuICAgIGNsaTogXCItVCwgLS10cnVzdFwiXG4gIH0sXG4gIG1heFNpemU6IHtcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIGRlZmF1bHQ6IEluZmluaXR5LFxuICAgIGRlc2NyaXB0aW9uOiBcIklmIG5vbi16ZXJvLCBhbGwgdXNlci1zcGVjaWZpZWQgc2l6ZXMsIGUuZy4gaW4gXCIgKyBcIlxcXFxydWxlezUwMGVtfXs1MDBlbX0sIHdpbGwgYmUgY2FwcGVkIHRvIG1heFNpemUgZW1zLiBPdGhlcndpc2UsIFwiICsgXCJlbGVtZW50cyBhbmQgc3BhY2VzIGNhbiBiZSBhcmJpdHJhcmlseSBsYXJnZVwiLFxuICAgIHByb2Nlc3NvcjogcyA9PiBNYXRoLm1heCgwLCBzKSxcbiAgICBjbGk6IFwiLXMsIC0tbWF4LXNpemUgPG4+XCIsXG4gICAgY2xpUHJvY2Vzc29yOiBwYXJzZUludFxuICB9LFxuICBtYXhFeHBhbmQ6IHtcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIGRlZmF1bHQ6IDEwMDAsXG4gICAgZGVzY3JpcHRpb246IFwiTGltaXQgdGhlIG51bWJlciBvZiBtYWNybyBleHBhbnNpb25zIHRvIHRoZSBzcGVjaWZpZWQgXCIgKyBcIm51bWJlciwgdG8gcHJldmVudCBlLmcuIGluZmluaXRlIG1hY3JvIGxvb3BzLiBJZiBzZXQgdG8gSW5maW5pdHksIFwiICsgXCJ0aGUgbWFjcm8gZXhwYW5kZXIgd2lsbCB0cnkgdG8gZnVsbHkgZXhwYW5kIGFzIGluIExhVGVYLlwiLFxuICAgIHByb2Nlc3NvcjogbiA9PiBNYXRoLm1heCgwLCBuKSxcbiAgICBjbGk6IFwiLWUsIC0tbWF4LWV4cGFuZCA8bj5cIixcbiAgICBjbGlQcm9jZXNzb3I6IG4gPT4gbiA9PT0gXCJJbmZpbml0eVwiID8gSW5maW5pdHkgOiBwYXJzZUludChuKVxuICB9LFxuICBnbG9iYWxHcm91cDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGNsaTogZmFsc2VcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICBpZiAoc2NoZW1hLmRlZmF1bHQpIHtcbiAgICByZXR1cm4gc2NoZW1hLmRlZmF1bHQ7XG4gIH1cblxuICB2YXIgdHlwZSA9IHNjaGVtYS50eXBlO1xuICB2YXIgZGVmYXVsdFR5cGUgPSBBcnJheS5pc0FycmF5KHR5cGUpID8gdHlwZVswXSA6IHR5cGU7XG5cbiAgaWYgKHR5cGVvZiBkZWZhdWx0VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVmYXVsdFR5cGUuZW51bVswXTtcbiAgfVxuXG4gIHN3aXRjaCAoZGVmYXVsdFR5cGUpIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gJyc7XG5cbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIDA7XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgcmV0dXJuIHt9O1xuICB9XG59XG4vKipcbiAqIFRoZSBtYWluIFNldHRpbmdzIG9iamVjdFxuICpcbiAqIFRoZSBjdXJyZW50IG9wdGlvbnMgc3RvcmVkIGFyZTpcbiAqICAtIGRpc3BsYXlNb2RlOiBXaGV0aGVyIHRoZSBleHByZXNzaW9uIHNob3VsZCBiZSB0eXBlc2V0IGFzIGlubGluZSBtYXRoXG4gKiAgICAgICAgICAgICAgICAgKGZhbHNlLCB0aGUgZGVmYXVsdCksIG1lYW5pbmcgdGhhdCB0aGUgbWF0aCBzdGFydHMgaW5cbiAqICAgICAgICAgICAgICAgICBcXHRleHRzdHlsZSBhbmQgaXMgcGxhY2VkIGluIGFuIGlubGluZS1ibG9jayk7IG9yIGFzIGRpc3BsYXlcbiAqICAgICAgICAgICAgICAgICBtYXRoICh0cnVlKSwgbWVhbmluZyB0aGF0IHRoZSBtYXRoIHN0YXJ0cyBpbiBcXGRpc3BsYXlzdHlsZVxuICogICAgICAgICAgICAgICAgIGFuZCBpcyBwbGFjZWQgaW4gYSBibG9jayB3aXRoIHZlcnRpY2FsIG1hcmdpbi5cbiAqL1xuXG5cbmNsYXNzIFNldHRpbmdzIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMuZGlzcGxheU1vZGUgPSB2b2lkIDA7XG4gICAgdGhpcy5vdXRwdXQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXFubyA9IHZvaWQgMDtcbiAgICB0aGlzLmZsZXFuID0gdm9pZCAwO1xuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdm9pZCAwO1xuICAgIHRoaXMuZXJyb3JDb2xvciA9IHZvaWQgMDtcbiAgICB0aGlzLm1hY3JvcyA9IHZvaWQgMDtcbiAgICB0aGlzLm1pblJ1bGVUaGlja25lc3MgPSB2b2lkIDA7XG4gICAgdGhpcy5jb2xvcklzVGV4dENvbG9yID0gdm9pZCAwO1xuICAgIHRoaXMuc3RyaWN0ID0gdm9pZCAwO1xuICAgIHRoaXMudHJ1c3QgPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhTaXplID0gdm9pZCAwO1xuICAgIHRoaXMubWF4RXhwYW5kID0gdm9pZCAwO1xuICAgIHRoaXMuZ2xvYmFsR3JvdXAgPSB2b2lkIDA7XG4gICAgLy8gYWxsb3cgbnVsbCBvcHRpb25zXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBmb3IgKHZhciBwcm9wIGluIFNFVFRJTkdTX1NDSEVNQSkge1xuICAgICAgaWYgKFNFVFRJTkdTX1NDSEVNQS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgIHZhciBzY2hlbWEgPSBTRVRUSU5HU19TQ0hFTUFbcHJvcF07IC8vIFRPRE86IHZhbGlkYXRlIG9wdGlvbnNcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgICAgIHRoaXNbcHJvcF0gPSBvcHRpb25zW3Byb3BdICE9PSB1bmRlZmluZWQgPyBzY2hlbWEucHJvY2Vzc29yID8gc2NoZW1hLnByb2Nlc3NvcihvcHRpb25zW3Byb3BdKSA6IG9wdGlvbnNbcHJvcF0gOiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlcG9ydCBub25zdHJpY3QgKG5vbi1MYVRlWC1jb21wYXRpYmxlKSBpbnB1dC5cbiAgICogQ2FuIHNhZmVseSBub3QgYmUgY2FsbGVkIGlmIGB0aGlzLnN0cmljdGAgaXMgZmFsc2UgaW4gSmF2YVNjcmlwdC5cbiAgICovXG5cblxuICByZXBvcnROb25zdHJpY3QoZXJyb3JDb2RlLCBlcnJvck1zZywgdG9rZW4pIHtcbiAgICB2YXIgc3RyaWN0ID0gdGhpcy5zdHJpY3Q7XG5cbiAgICBpZiAodHlwZW9mIHN0cmljdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAvLyBBbGxvdyByZXR1cm4gdmFsdWUgb2Ygc3RyaWN0IGZ1bmN0aW9uIHRvIGJlIGJvb2xlYW4gb3Igc3RyaW5nXG4gICAgICAvLyAob3IgbnVsbC91bmRlZmluZWQsIG1lYW5pbmcgbm8gZnVydGhlciBwcm9jZXNzaW5nKS5cbiAgICAgIHN0cmljdCA9IHN0cmljdChlcnJvckNvZGUsIGVycm9yTXNnLCB0b2tlbik7XG4gICAgfVxuXG4gICAgaWYgKCFzdHJpY3QgfHwgc3RyaWN0ID09PSBcImlnbm9yZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChzdHJpY3QgPT09IHRydWUgfHwgc3RyaWN0ID09PSBcImVycm9yXCIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ2Vycm9yJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIiksIHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gXCJ3YXJuXCIpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICd3YXJuJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3b24ndCBoYXBwZW4gaW4gdHlwZS1zYWZlIGNvZGVcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvIFwiICsgKFwidW5yZWNvZ25pemVkICdcIiArIHN0cmljdCArIFwiJzogXCIgKyBlcnJvck1zZyArIFwiIFtcIiArIGVycm9yQ29kZSArIFwiXVwiKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRvIGFwcGx5IHN0cmljdCAoTGFUZVgtYWRoZXJpbmcpIGJlaGF2aW9yIGZvciB1bnVzdWFsXG4gICAqIGlucHV0IChsaWtlIGBcXFxcYCkuICBVbmxpa2UgYG5vbnN0cmljdGAsIHdpbGwgbm90IHRocm93IGFuIGVycm9yO1xuICAgKiBpbnN0ZWFkLCBcImVycm9yXCIgdHJhbnNsYXRlcyB0byBhIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAsIHdoaWxlIFwiaWdub3JlXCJcbiAgICogdHJhbnNsYXRlcyB0byBhIHJldHVybiB2YWx1ZSBvZiBgZmFsc2VgLiAgTWF5IHN0aWxsIHByaW50IGEgd2FybmluZzpcbiAgICogXCJ3YXJuXCIgcHJpbnRzIGEgd2FybmluZyBhbmQgcmV0dXJucyBgZmFsc2VgLlxuICAgKiBUaGlzIGlzIGZvciB0aGUgc2Vjb25kIGNhdGVnb3J5IG9mIGBlcnJvckNvZGVgcyBsaXN0ZWQgaW4gdGhlIFJFQURNRS5cbiAgICovXG5cblxuICB1c2VTdHJpY3RCZWhhdmlvcihlcnJvckNvZGUsIGVycm9yTXNnLCB0b2tlbikge1xuICAgIHZhciBzdHJpY3QgPSB0aGlzLnN0cmljdDtcblxuICAgIGlmICh0eXBlb2Ygc3RyaWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIEFsbG93IHJldHVybiB2YWx1ZSBvZiBzdHJpY3QgZnVuY3Rpb24gdG8gYmUgYm9vbGVhbiBvciBzdHJpbmdcbiAgICAgIC8vIChvciBudWxsL3VuZGVmaW5lZCwgbWVhbmluZyBubyBmdXJ0aGVyIHByb2Nlc3NpbmcpLlxuICAgICAgLy8gQnV0IGNhdGNoIGFueSBleGNlcHRpb25zIHRocm93biBieSBmdW5jdGlvbiwgdHJlYXRpbmcgdGhlbVxuICAgICAgLy8gbGlrZSBcImVycm9yXCIuXG4gICAgICB0cnkge1xuICAgICAgICBzdHJpY3QgPSBzdHJpY3QoZXJyb3JDb2RlLCBlcnJvck1zZywgdG9rZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyaWN0ID0gXCJlcnJvclwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghc3RyaWN0IHx8IHN0cmljdCA9PT0gXCJpZ25vcmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoc3RyaWN0ID09PSB0cnVlIHx8IHN0cmljdCA9PT0gXCJlcnJvclwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gXCJ3YXJuXCIpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICd3YXJuJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3b24ndCBoYXBwZW4gaW4gdHlwZS1zYWZlIGNvZGVcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvIFwiICsgKFwidW5yZWNvZ25pemVkICdcIiArIHN0cmljdCArIFwiJzogXCIgKyBlcnJvck1zZyArIFwiIFtcIiArIGVycm9yQ29kZSArIFwiXVwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRvIHRlc3QgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGlucHV0LCBhbmQgcmV0dXJuXG4gICAqIGB0cnVlYCAodHJ1c3RlZCkgb3IgYGZhbHNlYCAodW50cnVzdGVkKS4gIFRoZSBzb2xlIGFyZ3VtZW50IGBjb250ZXh0YFxuICAgKiBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGggYGNvbW1hbmRgIGZpZWxkIHNwZWNpZnlpbmcgdGhlIHJlbGV2YW50IExhVGVYXG4gICAqIGNvbW1hbmQgKGFzIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYFxcYCksIGFuZCBhbnkgb3RoZXIgYXJndW1lbnRzLCBldGMuXG4gICAqIElmIGBjb250ZXh0YCBoYXMgYSBgdXJsYCBmaWVsZCwgYSBgcHJvdG9jb2xgIGZpZWxkIHdpbGwgYXV0b21hdGljYWxseVxuICAgKiBnZXQgYWRkZWQgYnkgdGhpcyBmdW5jdGlvbiAoY2hhbmdpbmcgdGhlIHNwZWNpZmllZCBvYmplY3QpLlxuICAgKi9cblxuXG4gIGlzVHJ1c3RlZChjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQudXJsICYmICFjb250ZXh0LnByb3RvY29sKSB7XG4gICAgICBjb250ZXh0LnByb3RvY29sID0gdXRpbHMucHJvdG9jb2xGcm9tVXJsKGNvbnRleHQudXJsKTtcbiAgICB9XG5cbiAgICB2YXIgdHJ1c3QgPSB0eXBlb2YgdGhpcy50cnVzdCA9PT0gXCJmdW5jdGlvblwiID8gdGhpcy50cnVzdChjb250ZXh0KSA6IHRoaXMudHJ1c3Q7XG4gICAgcmV0dXJuIEJvb2xlYW4odHJ1c3QpO1xuICB9XG5cbn1cblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgaW5mb3JtYXRpb24gYW5kIGNsYXNzZXMgZm9yIHRoZSB2YXJpb3VzIGtpbmRzIG9mIHN0eWxlc1xuICogdXNlZCBpbiBUZVguIEl0IHByb3ZpZGVzIGEgZ2VuZXJpYyBgU3R5bGVgIGNsYXNzLCB3aGljaCBob2xkcyBpbmZvcm1hdGlvblxuICogYWJvdXQgYSBzcGVjaWZpYyBzdHlsZS4gSXQgdGhlbiBwcm92aWRlcyBpbnN0YW5jZXMgb2YgYWxsIHRoZSBkaWZmZXJlbnQga2luZHNcbiAqIG9mIHN0eWxlcyBwb3NzaWJsZSwgYW5kIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBtb3ZlIGJldHdlZW4gdGhlbSBhbmQgZ2V0XG4gKiBpbmZvcm1hdGlvbiBhYm91dCB0aGVtLlxuICovXG5cbi8qKlxuICogVGhlIG1haW4gc3R5bGUgY2xhc3MuIENvbnRhaW5zIGEgdW5pcXVlIGlkIGZvciB0aGUgc3R5bGUsIGEgc2l6ZSAod2hpY2ggaXNcbiAqIHRoZSBzYW1lIGZvciBjcmFtcGVkIGFuZCB1bmNyYW1wZWQgdmVyc2lvbiBvZiBhIHN0eWxlKSwgYW5kIGEgY3JhbXBlZCBmbGFnLlxuICovXG5jbGFzcyBTdHlsZSB7XG4gIGNvbnN0cnVjdG9yKGlkLCBzaXplLCBjcmFtcGVkKSB7XG4gICAgdGhpcy5pZCA9IHZvaWQgMDtcbiAgICB0aGlzLnNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5jcmFtcGVkID0gdm9pZCAwO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnNpemUgPSBzaXplO1xuICAgIHRoaXMuY3JhbXBlZCA9IGNyYW1wZWQ7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc3R5bGUgb2YgYSBzdXBlcnNjcmlwdCBnaXZlbiBhIGJhc2UgaW4gdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAqL1xuXG5cbiAgc3VwKCkge1xuICAgIHJldHVybiBzdHlsZXNbc3VwW3RoaXMuaWRdXTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIHN1YnNjcmlwdCBnaXZlbiBhIGJhc2UgaW4gdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAqL1xuXG5cbiAgc3ViKCkge1xuICAgIHJldHVybiBzdHlsZXNbc3ViW3RoaXMuaWRdXTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIGZyYWN0aW9uIG51bWVyYXRvciBnaXZlbiB0aGUgZnJhY3Rpb24gaW4gdGhlIGN1cnJlbnRcbiAgICogc3R5bGUuXG4gICAqL1xuXG5cbiAgZnJhY051bSgpIHtcbiAgICByZXR1cm4gc3R5bGVzW2ZyYWNOdW1bdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0eWxlIG9mIGEgZnJhY3Rpb24gZGVub21pbmF0b3IgZ2l2ZW4gdGhlIGZyYWN0aW9uIGluIHRoZSBjdXJyZW50XG4gICAqIHN0eWxlLlxuICAgKi9cblxuXG4gIGZyYWNEZW4oKSB7XG4gICAgcmV0dXJuIHN0eWxlc1tmcmFjRGVuW3RoaXMuaWRdXTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBjcmFtcGVkIHZlcnNpb24gb2YgYSBzdHlsZSAoaW4gcGFydGljdWxhciwgY3JhbXBpbmcgYSBjcmFtcGVkIHN0eWxlXG4gICAqIGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHlsZSkuXG4gICAqL1xuXG5cbiAgY3JhbXAoKSB7XG4gICAgcmV0dXJuIHN0eWxlc1tjcmFtcFt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCBhIHRleHQgb3IgZGlzcGxheSB2ZXJzaW9uIG9mIHRoaXMgc3R5bGUuXG4gICAqL1xuXG5cbiAgdGV4dCgpIHtcbiAgICByZXR1cm4gc3R5bGVzW3RleHQkMVt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0cnVlIGlmIHRoaXMgc3R5bGUgaXMgdGlnaHRseSBzcGFjZWQgKHNjcmlwdHN0eWxlL3NjcmlwdHNjcmlwdHN0eWxlKVxuICAgKi9cblxuXG4gIGlzVGlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA+PSAyO1xuICB9XG5cbn0gLy8gRXhwb3J0IGFuIGludGVyZmFjZSBmb3IgdHlwZSBjaGVja2luZywgYnV0IGRvbid0IGV4cG9zZSB0aGUgaW1wbGVtZW50YXRpb24uXG4vLyBUaGlzIHdheSwgbm8gbW9yZSBzdHlsZXMgY2FuIGJlIGdlbmVyYXRlZC5cblxuXG4vLyBJRHMgb2YgdGhlIGRpZmZlcmVudCBzdHlsZXNcbnZhciBEID0gMDtcbnZhciBEYyA9IDE7XG52YXIgVCA9IDI7XG52YXIgVGMgPSAzO1xudmFyIFMgPSA0O1xudmFyIFNjID0gNTtcbnZhciBTUyA9IDY7XG52YXIgU1NjID0gNzsgLy8gSW5zdGFuY2VzIG9mIHRoZSBkaWZmZXJlbnQgc3R5bGVzXG5cbnZhciBzdHlsZXMgPSBbbmV3IFN0eWxlKEQsIDAsIGZhbHNlKSwgbmV3IFN0eWxlKERjLCAwLCB0cnVlKSwgbmV3IFN0eWxlKFQsIDEsIGZhbHNlKSwgbmV3IFN0eWxlKFRjLCAxLCB0cnVlKSwgbmV3IFN0eWxlKFMsIDIsIGZhbHNlKSwgbmV3IFN0eWxlKFNjLCAyLCB0cnVlKSwgbmV3IFN0eWxlKFNTLCAzLCBmYWxzZSksIG5ldyBTdHlsZShTU2MsIDMsIHRydWUpXTsgLy8gTG9va3VwIHRhYmxlcyBmb3Igc3dpdGNoaW5nIGZyb20gb25lIHN0eWxlIHRvIGFub3RoZXJcblxudmFyIHN1cCA9IFtTLCBTYywgUywgU2MsIFNTLCBTU2MsIFNTLCBTU2NdO1xudmFyIHN1YiA9IFtTYywgU2MsIFNjLCBTYywgU1NjLCBTU2MsIFNTYywgU1NjXTtcbnZhciBmcmFjTnVtID0gW1QsIFRjLCBTLCBTYywgU1MsIFNTYywgU1MsIFNTY107XG52YXIgZnJhY0RlbiA9IFtUYywgVGMsIFNjLCBTYywgU1NjLCBTU2MsIFNTYywgU1NjXTtcbnZhciBjcmFtcCA9IFtEYywgRGMsIFRjLCBUYywgU2MsIFNjLCBTU2MsIFNTY107XG52YXIgdGV4dCQxID0gW0QsIERjLCBULCBUYywgVCwgVGMsIFQsIFRjXTsgLy8gV2Ugb25seSBleHBvcnQgc29tZSBvZiB0aGUgc3R5bGVzLlxuXG52YXIgU3R5bGUkMSA9IHtcbiAgRElTUExBWTogc3R5bGVzW0RdLFxuICBURVhUOiBzdHlsZXNbVF0sXG4gIFNDUklQVDogc3R5bGVzW1NdLFxuICBTQ1JJUFRTQ1JJUFQ6IHN0eWxlc1tTU11cbn07XG5cbi8qXG4gKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgVW5pY29kZSBzY3JpcHRzIGFuZCBzY3JpcHQgZmFtaWxpZXMgdGhhdCB3ZVxuICogc3VwcG9ydC4gVG8gYWRkIG5ldyBzY3JpcHRzIG9yIGZhbWlsaWVzLCBqdXN0IGFkZCBhIG5ldyBlbnRyeSB0byB0aGVcbiAqIHNjcmlwdERhdGEgYXJyYXkgYmVsb3cuIEFkZGluZyBzY3JpcHRzIHRvIHRoZSBzY3JpcHREYXRhIGFycmF5IGFsbG93c1xuICogY2hhcmFjdGVycyBmcm9tIHRoYXQgc2NyaXB0IHRvIGFwcGVhciBpbiBcXHRleHR7fSBlbnZpcm9ubWVudHMuXG4gKi9cblxuLyoqXG4gKiBFYWNoIHNjcmlwdCBvciBzY3JpcHQgZmFtaWx5IGhhcyBhIG5hbWUgYW5kIGFuIGFycmF5IG9mIGJsb2Nrcy5cbiAqIEVhY2ggYmxvY2sgaXMgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgd2hpY2ggc3BlY2lmeSB0aGUgc3RhcnQgYW5kXG4gKiBlbmQgcG9pbnRzIChpbmNsdXNpdmUpIG9mIGEgYmxvY2sgb2YgVW5pY29kZSBjb2RlcG9pbnRzLlxuICovXG5cbi8qKlxuICogVW5pY29kZSBibG9jayBkYXRhIGZvciB0aGUgZmFtaWxpZXMgb2Ygc2NyaXB0cyB3ZSBzdXBwb3J0IGluIFxcdGV4dHt9LlxuICogU2NyaXB0cyBvbmx5IG5lZWQgdG8gYXBwZWFyIGhlcmUgaWYgdGhleSBkbyBub3QgaGF2ZSBmb250IG1ldHJpY3MuXG4gKi9cbnZhciBzY3JpcHREYXRhID0gW3tcbiAgLy8gTGF0aW4gY2hhcmFjdGVycyBiZXlvbmQgdGhlIExhdGluLTEgY2hhcmFjdGVycyB3ZSBoYXZlIG1ldHJpY3MgZm9yLlxuICAvLyBOZWVkZWQgZm9yIEN6ZWNoLCBIdW5nYXJpYW4gYW5kIFR1cmtpc2ggdGV4dCwgZm9yIGV4YW1wbGUuXG4gIG5hbWU6ICdsYXRpbicsXG4gIGJsb2NrczogW1sweDAxMDAsIDB4MDI0Zl0sIC8vIExhdGluIEV4dGVuZGVkLUEgYW5kIExhdGluIEV4dGVuZGVkLUJcbiAgWzB4MDMwMCwgMHgwMzZmXSAvLyBDb21iaW5pbmcgRGlhY3JpdGljYWwgbWFya3NcbiAgXVxufSwge1xuICAvLyBUaGUgQ3lyaWxsaWMgc2NyaXB0IHVzZWQgYnkgUnVzc2lhbiBhbmQgcmVsYXRlZCBsYW5ndWFnZXMuXG4gIC8vIEEgQ3lyaWxsaWMgc3Vic2V0IHVzZWQgdG8gYmUgc3VwcG9ydGVkIGFzIGV4cGxpY2l0bHkgZGVmaW5lZFxuICAvLyBzeW1ib2xzIGluIHN5bWJvbHMuanNcbiAgbmFtZTogJ2N5cmlsbGljJyxcbiAgYmxvY2tzOiBbWzB4MDQwMCwgMHgwNGZmXV1cbn0sIHtcbiAgLy8gQXJtZW5pYW5cbiAgbmFtZTogJ2FybWVuaWFuJyxcbiAgYmxvY2tzOiBbWzB4MDUzMCwgMHgwNThGXV1cbn0sIHtcbiAgLy8gVGhlIEJyYWhtaWMgc2NyaXB0cyBvZiBTb3V0aCBhbmQgU291dGhlYXN0IEFzaWFcbiAgLy8gRGV2YW5hZ2FyaSAoMDkwMOKAkzA5N0YpXG4gIC8vIEJlbmdhbGkgKDA5ODDigJMwOUZGKVxuICAvLyBHdXJtdWtoaSAoMEEwMOKAkzBBN0YpXG4gIC8vIEd1amFyYXRpICgwQTgw4oCTMEFGRilcbiAgLy8gT3JpeWEgKDBCMDDigJMwQjdGKVxuICAvLyBUYW1pbCAoMEI4MOKAkzBCRkYpXG4gIC8vIFRlbHVndSAoMEMwMOKAkzBDN0YpXG4gIC8vIEthbm5hZGEgKDBDODDigJMwQ0ZGKVxuICAvLyBNYWxheWFsYW0gKDBEMDDigJMwRDdGKVxuICAvLyBTaW5oYWxhICgwRDgw4oCTMERGRilcbiAgLy8gVGhhaSAoMEUwMOKAkzBFN0YpXG4gIC8vIExhbyAoMEU4MOKAkzBFRkYpXG4gIC8vIFRpYmV0YW4gKDBGMDDigJMwRkZGKVxuICAvLyBNeWFubWFyICgxMDAw4oCTMTA5RilcbiAgbmFtZTogJ2JyYWhtaWMnLFxuICBibG9ja3M6IFtbMHgwOTAwLCAweDEwOUZdXVxufSwge1xuICBuYW1lOiAnZ2VvcmdpYW4nLFxuICBibG9ja3M6IFtbMHgxMEEwLCAweDEwZmZdXVxufSwge1xuICAvLyBDaGluZXNlIGFuZCBKYXBhbmVzZS5cbiAgLy8gVGhlIFwia1wiIGluIGNqayBpcyBmb3IgS29yZWFuLCBidXQgd2UndmUgc2VwYXJhdGVkIEtvcmVhbiBvdXRcbiAgbmFtZTogXCJjamtcIixcbiAgYmxvY2tzOiBbWzB4MzAwMCwgMHgzMEZGXSwgLy8gQ0pLIHN5bWJvbHMgYW5kIHB1bmN0dWF0aW9uLCBIaXJhZ2FuYSwgS2F0YWthbmFcbiAgWzB4NEUwMCwgMHg5RkFGXSwgLy8gQ0pLIGlkZW9ncmFtc1xuICBbMHhGRjAwLCAweEZGNjBdIC8vIEZ1bGx3aWR0aCBwdW5jdHVhdGlvblxuICAvLyBUT0RPOiBhZGQgaGFsZndpZHRoIEthdGFrYW5hIGFuZCBSb21hbmppIGdseXBoc1xuICBdXG59LCB7XG4gIC8vIEtvcmVhblxuICBuYW1lOiAnaGFuZ3VsJyxcbiAgYmxvY2tzOiBbWzB4QUMwMCwgMHhEN0FGXV1cbn1dO1xuLyoqXG4gKiBHaXZlbiBhIGNvZGVwb2ludCwgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBzY3JpcHQgb3Igc2NyaXB0IGZhbWlseVxuICogaXQgaXMgZnJvbSwgb3IgbnVsbCBpZiBpdCBpcyBub3QgcGFydCBvZiBhIGtub3duIGJsb2NrXG4gKi9cblxuZnVuY3Rpb24gc2NyaXB0RnJvbUNvZGVwb2ludChjb2RlcG9pbnQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHREYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNjcmlwdCA9IHNjcmlwdERhdGFbaV07XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgc2NyaXB0LmJsb2Nrcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBibG9jayA9IHNjcmlwdC5ibG9ja3NbX2ldO1xuXG4gICAgICBpZiAoY29kZXBvaW50ID49IGJsb2NrWzBdICYmIGNvZGVwb2ludCA8PSBibG9ja1sxXSkge1xuICAgICAgICByZXR1cm4gc2NyaXB0Lm5hbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEEgZmxhdHRlbmVkIHZlcnNpb24gb2YgYWxsIHRoZSBzdXBwb3J0ZWQgYmxvY2tzIGluIGEgc2luZ2xlIGFycmF5LlxuICogVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gdG8gbWFrZSBzdXBwb3J0ZWRDb2RlcG9pbnQoKSBmYXN0LlxuICovXG5cbnZhciBhbGxCbG9ja3MgPSBbXTtcbnNjcmlwdERhdGEuZm9yRWFjaChzID0+IHMuYmxvY2tzLmZvckVhY2goYiA9PiBhbGxCbG9ja3MucHVzaCguLi5iKSkpO1xuLyoqXG4gKiBHaXZlbiBhIGNvZGVwb2ludCwgcmV0dXJuIHRydWUgaWYgaXQgZmFsbHMgd2l0aGluIG9uZSBvZiB0aGVcbiAqIHNjcmlwdHMgb3Igc2NyaXB0IGZhbWlsaWVzIGRlZmluZWQgYWJvdmUgYW5kIGZhbHNlIG90aGVyd2lzZS5cbiAqXG4gKiBNaWNybyBiZW5jaG1hcmtzIHNob3dzIHRoYXQgdGhpcyBpcyBmYXN0ZXIgdGhhblxuICogL1tcXHUzMDAwLVxcdTMwRkZcXHU0RTAwLVxcdTlGQUZcXHVGRjAwLVxcdUZGNjBcXHVBQzAwLVxcdUQ3QUZcXHUwOTAwLVxcdTEwOUZdLy50ZXN0KClcbiAqIGluIEZpcmVmb3gsIENocm9tZSBhbmQgTm9kZS5cbiAqL1xuXG5mdW5jdGlvbiBzdXBwb3J0ZWRDb2RlcG9pbnQoY29kZXBvaW50KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsQmxvY2tzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgaWYgKGNvZGVwb2ludCA+PSBhbGxCbG9ja3NbaV0gJiYgY29kZXBvaW50IDw9IGFsbEJsb2Nrc1tpICsgMV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUaGlzIGZpbGUgcHJvdmlkZXMgc3VwcG9ydCB0byBkb21UcmVlLmpzIGFuZCBkZWxpbWl0ZXIuanMuXG4gKiBJdCdzIGEgc3RvcmVob3VzZSBvZiBwYXRoIGdlb21ldHJ5IGZvciBTVkcgaW1hZ2VzLlxuICovXG4vLyBJbiBhbGwgcGF0aHMgYmVsb3csIHRoZSB2aWV3Qm94LXRvLWVtIHNjYWxlIGlzIDEwMDA6MS5cbnZhciBoTGluZVBhZCA9IDgwOyAvLyBwYWRkaW5nIGFib3ZlIGEgc3FydCB2aW5jdWx1bS4gUHJldmVudHMgaW1hZ2UgY3JvcHBpbmcuXG4vLyBUaGUgdmluY3VsdW0gb2YgYSBcXHNxcnQgY2FuIGJlIG1hZGUgdGhpY2tlciBieSBhIEthVGVYIHJlbmRlcmluZyBvcHRpb24uXG4vLyBUaGluayBvZiB2YXJpYWJsZSBleHRyYVZpbmN1bHVtIGFzIHR3byBkZXRvdXJzIGluIHRoZSBTVkcgcGF0aC5cbi8vIFRoZSBkZXRvdXIgYmVnaW5zIGF0IHRoZSBsb3dlciBsZWZ0IG9mIHRoZSBhcmVhIGxhYmVsZWQgZXh0cmFWaW5jdWx1bSBiZWxvdy5cbi8vIFRoZSBkZXRvdXIgcHJvY2VlZHMgb25lIGV4dHJhVmluY3VsdW0gZGlzdGFuY2UgdXAgYW5kIHNsaWdodGx5IHRvIHRoZSByaWdodCxcbi8vIGRpc3BsYWNpbmcgdGhlIHJhZGl1c2VkIGNvcm5lciBiZXR3ZWVuIHN1cmQgYW5kIHZpbmN1bHVtLiBUaGUgcmFkaXVzIGlzXG4vLyB0cmF2ZXJzZWQgYXMgdXN1YWwsIHRoZW4gdGhlIGRldG91ciByZXN1bWVzLiBJdCBnb2VzIHJpZ2h0LCB0byB0aGUgZW5kIG9mXG4vLyB0aGUgdmVyeSBsb25nIHZpbmN1bHVtLCB0aGVuIGRvd24gb25lIGV4dHJhVmluY3VsdW0gZGlzdGFuY2UsXG4vLyBhZnRlciB3aGljaCBpdCByZXN1bWVzIHJlZ3VsYXIgcGF0aCBnZW9tZXRyeSBmb3IgdGhlIHJhZGljYWwuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aW5jdWx1bVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL1xuICAgICAgICAgL+KWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKGkGV4dHJhVmluY3VsdW1cbiAgICAgICAgLyDilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojihpAwLjA0ZW0gKDQwIHVuaXQpIHN0ZCB2aW5jdWx1bSB0aGlja25lc3NcbiAgICAgICAvIC9cbiAgICAgIC8gL1xuICAgICAvIC9cXFxuICAgIC8gLyBzdXJkXG4qL1xuXG52YXIgc3FydE1haW4gPSBmdW5jdGlvbiBzcXJ0TWFpbihleHRyYVZpbmN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzcXJ0TWFpbiBwYXRoIGdlb21ldHJ5IGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVggTWFpblxuICByZXR1cm4gXCJNOTUsXCIgKyAoNjIyICsgZXh0cmFWaW5jdWx1bSArIGhMaW5lUGFkKSArIFwiXFxuYy0yLjcsMCwtNy4xNywtMi43LC0xMy41LC04Yy01LjgsLTUuMywtOS41LC0xMCwtOS41LC0xNFxcbmMwLC0yLDAuMywtMy4zLDEsLTRjMS4zLC0yLjcsMjMuODMsLTIwLjcsNjcuNSwtNTRcXG5jNDQuMiwtMzMuMyw2NS44LC01MC4zLDY2LjUsLTUxYzEuMywtMS4zLDMsLTIsNSwtMmM0LjcsMCw4LjcsMy4zLDEyLDEwXFxuczE3MywzNzgsMTczLDM3OGMwLjcsMCwzNS4zLC03MSwxMDQsLTIxM2M2OC43LC0xNDIsMTM3LjUsLTI4NSwyMDYuNSwtNDI5XFxuYzY5LC0xNDQsMTA0LjUsLTIxNy43LDEwNi41LC0yMjFcXG5sXCIgKyBleHRyYVZpbmN1bHVtIC8gMi4wNzUgKyBcIiAtXCIgKyBleHRyYVZpbmN1bHVtICsgXCJcXG5jNS4zLC05LjMsMTIsLTE0LDIwLC0xNFxcbkg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiSDg0NS4yNzI0XFxucy0yMjUuMjcyLDQ2NywtMjI1LjI3Miw0NjdzLTIzNSw0ODYsLTIzNSw0ODZjLTIuNyw0LjcsLTksNywtMTksN1xcbmMtNiwwLC0xMCwtMSwtMTIsLTNzLTE5NCwtNDIyLC0xOTQsLTQyMnMtNjUsNDcsLTY1LDQ3elxcbk1cIiArICg4MzQgKyBleHRyYVZpbmN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcImg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiaC00MDAwMDB6XCI7XG59O1xuXG52YXIgc3FydFNpemUxID0gZnVuY3Rpb24gc3FydFNpemUxKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNpemUxIGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTEtUmVndWxhclxuICByZXR1cm4gXCJNMjYzLFwiICsgKDYwMSArIGV4dHJhVmluY3VsdW0gKyBoTGluZVBhZCkgKyBcImMwLjcsMCwxOCwzOS43LDUyLDExOVxcbmMzNCw3OS4zLDY4LjE2NywxNTguNywxMDIuNSwyMzhjMzQuMyw3OS4zLDUxLjgsMTE5LjMsNTIuNSwxMjBcXG5jMzQwLC03MDQuNyw1MTAuNywtMTA2MC4zLDUxMiwtMTA2N1xcbmxcIiArIGV4dHJhVmluY3VsdW0gLyAyLjA4NCArIFwiIC1cIiArIGV4dHJhVmluY3VsdW0gKyBcIlxcbmM0LjcsLTcuMywxMSwtMTEsMTksLTExXFxuSDQwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcIkgxMDEyLjNcXG5zLTI3MS4zLDU2NywtMjcxLjMsNTY3Yy0zOC43LDgwLjcsLTg0LDE3NSwtMTM2LDI4M2MtNTIsMTA4LC04OS4xNjcsMTg1LjMsLTExMS41LDIzMlxcbmMtMjIuMyw0Ni43LC0zMy44LDcwLjMsLTM0LjUsNzFjLTQuNyw0LjcsLTEyLjMsNywtMjMsN3MtMTIsLTEsLTEyLC0xXFxucy0xMDksLTI1MywtMTA5LC0yNTNjLTcyLjcsLTE2OCwtMTA5LjMsLTI1MiwtMTEwLC0yNTJjLTEwLjcsOCwtMjIsMTYuNywtMzQsMjZcXG5jLTIyLDE3LjMsLTMzLjMsMjYsLTM0LDI2cy0yNiwtMjYsLTI2LC0yNnM3NiwtNTksNzYsLTU5czc2LC02MCw3NiwtNjB6XFxuTVwiICsgKDEwMDEgKyBleHRyYVZpbmN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcImg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiaC00MDAwMDB6XCI7XG59O1xuXG52YXIgc3FydFNpemUyID0gZnVuY3Rpb24gc3FydFNpemUyKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNpemUyIGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTItUmVndWxhclxuICByZXR1cm4gXCJNOTgzIFwiICsgKDEwICsgZXh0cmFWaW5jdWx1bSArIGhMaW5lUGFkKSArIFwiXFxubFwiICsgZXh0cmFWaW5jdWx1bSAvIDMuMTMgKyBcIiAtXCIgKyBleHRyYVZpbmN1bHVtICsgXCJcXG5jNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJcXG5IMTAxMy4xcy04My40LDI2OCwtMjY0LjEsODQwYy0xODAuNyw1NzIsLTI3Nyw4NzYuMywtMjg5LDkxM2MtNC43LDQuNywtMTIuNyw3LC0yNCw3XFxucy0xMiwwLC0xMiwwYy0xLjMsLTMuMywtMy43LC0xMS43LC03LC0yNWMtMzUuMywtMTI1LjMsLTEwNi43LC0zNzMuMywtMjE0LC03NDRcXG5jLTEwLDEyLC0yMSwyNSwtMzMsMzlzLTMyLDM5LC0zMiwzOWMtNiwtNS4zLC0xNSwtMTQsLTI3LC0yNnMyNSwtMzAsMjUsLTMwXFxuYzI2LjcsLTMyLjcsNTIsLTYzLDc2LC05MXM1MiwtNjAsNTIsLTYwczIwOCw3MjIsMjA4LDcyMlxcbmM1NiwtMTc1LjMsMTI2LjMsLTM5Ny4zLDIxMSwtNjY2Yzg0LjcsLTI2OC43LDE1My44LC00ODguMiwyMDcuNSwtNjU4LjVcXG5jNTMuNywtMTcwLjMsODQuNSwtMjY2LjgsOTIuNSwtMjg5LjV6XFxuTVwiICsgKDEwMDEgKyBleHRyYVZpbmN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcImg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiaC00MDAwMDB6XCI7XG59O1xuXG52YXIgc3FydFNpemUzID0gZnVuY3Rpb24gc3FydFNpemUzKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNpemUzIGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTMtUmVndWxhclxuICByZXR1cm4gXCJNNDI0LFwiICsgKDIzOTggKyBleHRyYVZpbmN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5jLTEuMywtMC43LC0zOC41LC0xNzIsLTExMS41LC01MTRjLTczLC0zNDIsLTEwOS44LC01MTMuMywtMTEwLjUsLTUxNFxcbmMwLC0yLC0xMC43LDE0LjMsLTMyLDQ5Yy00LjcsNy4zLC05LjgsMTUuNywtMTUuNSwyNWMtNS43LDkuMywtOS44LDE2LC0xMi41LDIwXFxucy01LDcsLTUsN2MtNCwtMy4zLC04LjMsLTcuNywtMTMsLTEzcy0xMywtMTMsLTEzLC0xM3M3NiwtMTIyLDc2LC0xMjJzNzcsLTEyMSw3NywtMTIxXFxuczIwOSw5NjgsMjA5LDk2OGMwLC0yLDg0LjcsLTM2MS43LDI1NCwtMTA3OWMxNjkuMywtNzE3LjMsMjU0LjcsLTEwNzcuNywyNTYsLTEwODFcXG5sXCIgKyBleHRyYVZpbmN1bHVtIC8gNC4yMjMgKyBcIiAtXCIgKyBleHRyYVZpbmN1bHVtICsgXCJjNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMFxcbnZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJIMTAxNC42XFxucy04Ny4zLDM3OC43LC0yNzIuNiwxMTY2Yy0xODUuMyw3ODcuMywtMjc5LjMsMTE4Mi4zLC0yODIsMTE4NVxcbmMtMiw2LC0xMCw5LC0yNCw5XFxuYy04LDAsLTEyLC0wLjcsLTEyLC0yeiBNXCIgKyAoMTAwMSArIGV4dHJhVmluY3VsdW0pICsgXCIgXCIgKyBoTGluZVBhZCArIFwiXFxuaDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJoLTQwMDAwMHpcIjtcbn07XG5cbnZhciBzcXJ0U2l6ZTQgPSBmdW5jdGlvbiBzcXJ0U2l6ZTQoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQpIHtcbiAgLy8gc2l6ZTQgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWF9TaXplNC1SZWd1bGFyXG4gIHJldHVybiBcIk00NzMsXCIgKyAoMjcxMyArIGV4dHJhVmluY3VsdW0gKyBoTGluZVBhZCkgKyBcIlxcbmMzMzkuMywtMTc5OS4zLDUwOS4zLC0yNzAwLDUxMCwtMjcwMiBsXCIgKyBleHRyYVZpbmN1bHVtIC8gNS4yOTggKyBcIiAtXCIgKyBleHRyYVZpbmN1bHVtICsgXCJcXG5jMy4zLC03LjMsOS4zLC0xMSwxOCwtMTEgSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJIMTAxNy43XFxucy05MC41LDQ3OCwtMjc2LjIsMTQ2NmMtMTg1LjcsOTg4LC0yNzkuNSwxNDgzLC0yODEuNSwxNDg1Yy0yLDYsLTEwLDksLTI0LDlcXG5jLTgsMCwtMTIsLTAuNywtMTIsLTJjMCwtMS4zLC01LjMsLTMyLC0xNiwtOTJjLTUwLjcsLTI5My4zLC0xMTkuNywtNjkzLjMsLTIwNywtMTIwMFxcbmMwLC0xLjMsLTUuMyw4LjcsLTE2LDMwYy0xMC43LDIxLjMsLTIxLjMsNDIuNywtMzIsNjRzLTE2LDMzLC0xNiwzM3MtMjYsLTI2LC0yNiwtMjZcXG5zNzYsLTE1Myw3NiwtMTUzczc3LC0xNTEsNzcsLTE1MWMwLjcsMC43LDM1LjcsMjAyLDEwNSw2MDRjNjcuMyw0MDAuNywxMDIsNjAyLjcsMTA0LFxcbjYwNnpNXCIgKyAoMTAwMSArIGV4dHJhVmluY3VsdW0pICsgXCIgXCIgKyBoTGluZVBhZCArIFwiaDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJIMTAxNy43elwiO1xufTtcblxudmFyIHBoYXNlUGF0aCA9IGZ1bmN0aW9uIHBoYXNlUGF0aCh5KSB7XG4gIHZhciB4ID0geSAvIDI7IC8vIHggY29vcmRpbmF0ZSBhdCB0b3Agb2YgYW5nbGVcblxuICByZXR1cm4gXCJNNDAwMDAwIFwiICsgeSArIFwiIEgwIExcIiArIHggKyBcIiAwIGw2NSA0NSBMMTQ1IFwiICsgKHkgLSA4MCkgKyBcIiBINDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRUYWxsID0gZnVuY3Rpb24gc3FydFRhbGwoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQsIHZpZXdCb3hIZWlnaHQpIHtcbiAgLy8gc3FydFRhbGwgaXMgZnJvbSBnbHlwaCBVMjNCNyBpbiB0aGUgZm9udCBLYVRlWF9TaXplNC1SZWd1bGFyXG4gIC8vIE9uZSBwYXRoIGVkZ2UgaGFzIGEgdmFyaWFibGUgbGVuZ3RoLiBJdCBydW5zIHZlcnRpY2FsbHkgZnJvbSB0aGUgdmluY3VsdW1cbiAgLy8gdG8gYSBwb2ludCBuZWFyICgxNCB1bml0cykgdGhlIGJvdHRvbSBvZiB0aGUgc3VyZC4gVGhlIHZpbmN1bHVtXG4gIC8vIGlzIG5vcm1hbGx5IDQwIHVuaXRzIHRoaWNrLiBTbyB0aGUgbGVuZ3RoIG9mIHRoZSBsaW5lIGluIHF1ZXN0aW9uIGlzOlxuICB2YXIgdmVydFNlZ21lbnQgPSB2aWV3Qm94SGVpZ2h0IC0gNTQgLSBoTGluZVBhZCAtIGV4dHJhVmluY3VsdW07XG4gIHJldHVybiBcIk03MDIgXCIgKyAoZXh0cmFWaW5jdWx1bSArIGhMaW5lUGFkKSArIFwiSDQwMDAwMFwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcIlxcbkg3NDJ2XCIgKyB2ZXJ0U2VnbWVudCArIFwibC00IDQtNCA0Yy0uNjY3LjcgLTIgMS41LTQgMi41cy00LjE2NyAxLjgzMy02LjUgMi41LTUuNSAxLTkuNSAxXFxuaC0xMmwtMjgtODRjLTE2LjY2Ny01Mi05Ni42NjcgLTI5NC4zMzMtMjQwLTcyN2wtMjEyIC02NDMgLTg1IDE3MFxcbmMtNC0zLjMzMy04LjMzMy03LjY2Ny0xMyAtMTNsLTEzLTEzbDc3LTE1NSA3Ny0xNTZjNjYgMTk5LjMzMyAxMzkgNDE5LjY2N1xcbjIxOSA2NjEgbDIxOCA2NjF6TTcwMiBcIiArIGhMaW5lUGFkICsgXCJINDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcIkg3NDJ6XCI7XG59O1xuXG52YXIgc3FydFBhdGggPSBmdW5jdGlvbiBzcXJ0UGF0aChzaXplLCBleHRyYVZpbmN1bHVtLCB2aWV3Qm94SGVpZ2h0KSB7XG4gIGV4dHJhVmluY3VsdW0gPSAxMDAwICogZXh0cmFWaW5jdWx1bTsgLy8gQ29udmVydCBmcm9tIGRvY3VtZW50IGVtcyB0byB2aWV3Qm94LlxuXG4gIHZhciBwYXRoID0gXCJcIjtcblxuICBzd2l0Y2ggKHNpemUpIHtcbiAgICBjYXNlIFwic3FydE1haW5cIjpcbiAgICAgIHBhdGggPSBzcXJ0TWFpbihleHRyYVZpbmN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTFcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTEoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwic3FydFNpemUyXCI6XG4gICAgICBwYXRoID0gc3FydFNpemUyKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRTaXplM1wiOlxuICAgICAgcGF0aCA9IHNxcnRTaXplMyhleHRyYVZpbmN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTRcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTQoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwic3FydFRhbGxcIjpcbiAgICAgIHBhdGggPSBzcXJ0VGFsbChleHRyYVZpbmN1bHVtLCBoTGluZVBhZCwgdmlld0JveEhlaWdodCk7XG4gIH1cblxuICByZXR1cm4gcGF0aDtcbn07XG52YXIgaW5uZXJQYXRoID0gZnVuY3Rpb24gaW5uZXJQYXRoKG5hbWUsIGhlaWdodCkge1xuICAvLyBUaGUgaW5uZXIgcGFydCBvZiBzdHJldGNoeSB0YWxsIGRlbGltaXRlcnNcbiAgc3dpdGNoIChuYW1lKSB7XG4gICAgY2FzZSBcIlxcdTIzOWNcIjpcbiAgICAgIHJldHVybiBcIk0yOTEgMCBINDE3IFZcIiArIGhlaWdodCArIFwiIEgyOTF6IE0yOTEgMCBINDE3IFZcIiArIGhlaWdodCArIFwiIEgyOTF6XCI7XG5cbiAgICBjYXNlIFwiXFx1MjIyM1wiOlxuICAgICAgcmV0dXJuIFwiTTE0NSAwIEgxODggVlwiICsgaGVpZ2h0ICsgXCIgSDE0NXogTTE0NSAwIEgxODggVlwiICsgaGVpZ2h0ICsgXCIgSDE0NXpcIjtcblxuICAgIGNhc2UgXCJcXHUyMjI1XCI6XG4gICAgICByZXR1cm4gXCJNMTQ1IDAgSDE4OCBWXCIgKyBoZWlnaHQgKyBcIiBIMTQ1eiBNMTQ1IDAgSDE4OCBWXCIgKyBoZWlnaHQgKyBcIiBIMTQ1elwiICsgKFwiTTM2NyAwIEg0MTAgVlwiICsgaGVpZ2h0ICsgXCIgSDM2N3ogTTM2NyAwIEg0MTAgVlwiICsgaGVpZ2h0ICsgXCIgSDM2N3pcIik7XG5cbiAgICBjYXNlIFwiXFx1MjM5ZlwiOlxuICAgICAgcmV0dXJuIFwiTTQ1NyAwIEg1ODMgVlwiICsgaGVpZ2h0ICsgXCIgSDQ1N3ogTTQ1NyAwIEg1ODMgVlwiICsgaGVpZ2h0ICsgXCIgSDQ1N3pcIjtcblxuICAgIGNhc2UgXCJcXHUyM2EyXCI6XG4gICAgICByZXR1cm4gXCJNMzE5IDAgSDQwMyBWXCIgKyBoZWlnaHQgKyBcIiBIMzE5eiBNMzE5IDAgSDQwMyBWXCIgKyBoZWlnaHQgKyBcIiBIMzE5elwiO1xuXG4gICAgY2FzZSBcIlxcdTIzYTVcIjpcbiAgICAgIHJldHVybiBcIk0yNjMgMCBIMzQ3IFZcIiArIGhlaWdodCArIFwiIEgyNjN6IE0yNjMgMCBIMzQ3IFZcIiArIGhlaWdodCArIFwiIEgyNjN6XCI7XG5cbiAgICBjYXNlIFwiXFx1MjNhYVwiOlxuICAgICAgcmV0dXJuIFwiTTM4NCAwIEg1MDQgVlwiICsgaGVpZ2h0ICsgXCIgSDM4NHogTTM4NCAwIEg1MDQgVlwiICsgaGVpZ2h0ICsgXCIgSDM4NHpcIjtcblxuICAgIGNhc2UgXCJcXHUyM2QwXCI6XG4gICAgICByZXR1cm4gXCJNMzEyIDAgSDM1NSBWXCIgKyBoZWlnaHQgKyBcIiBIMzEyeiBNMzEyIDAgSDM1NSBWXCIgKyBoZWlnaHQgKyBcIiBIMzEyelwiO1xuXG4gICAgY2FzZSBcIlxcdTIwMTZcIjpcbiAgICAgIHJldHVybiBcIk0yNTcgMCBIMzAwIFZcIiArIGhlaWdodCArIFwiIEgyNTd6IE0yNTcgMCBIMzAwIFZcIiArIGhlaWdodCArIFwiIEgyNTd6XCIgKyAoXCJNNDc4IDAgSDUyMSBWXCIgKyBoZWlnaHQgKyBcIiBINDc4eiBNNDc4IDAgSDUyMSBWXCIgKyBoZWlnaHQgKyBcIiBINDc4elwiKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJcIjtcbiAgfVxufTtcbnZhciBwYXRoID0ge1xuICAvLyBUaGUgZG91YmxlbGVmdGFycm93IGdlb21ldHJ5IGlzIGZyb20gZ2x5cGggVSsyMUQwIGluIHRoZSBmb250IEthVGVYIE1haW5cbiAgZG91YmxlbGVmdGFycm93OiBcIk0yNjIgMTU3XFxubDEwLTEwYzM0LTM2IDYyLjctNzcgODYtMTIzIDMuMy04IDUtMTMuMyA1LTE2IDAtNS4zLTYuNy04LTIwLTgtNy4zXFxuIDAtMTIuMi41LTE0LjUgMS41LTIuMyAxLTQuOCA0LjUtNy41IDEwLjUtNDkuMyA5Ny4zLTEyMS43IDE2OS4zLTIxNyAyMTYtMjhcXG4gMTQtNTcuMyAyNS04OCAzMy02LjcgMi0xMSAzLjgtMTMgNS41LTIgMS43LTMgNC4yLTMgNy41czEgNS44IDMgNy41XFxuYzIgMS43IDYuMyAzLjUgMTMgNS41IDY4IDE3LjMgMTI4LjIgNDcuOCAxODAuNSA5MS41IDUyLjMgNDMuNyA5My44IDk2LjIgMTI0LjVcXG4gMTU3LjUgOS4zIDggMTUuMyAxMi4zIDE4IDEzaDZjMTItLjcgMTgtNCAxOC0xMCAwLTItMS43LTctNS0xNS0yMy4zLTQ2LTUyLTg3XFxuLTg2LTEyM2wtMTAtMTBoMzk5NzM4di00MEgyMThjMzI4IDAgMCAwIDAgMGwtMTAtOGMtMjYuNy0yMC02NS43LTQzLTExNy02OSAyLjdcXG4tMiA2LTMuNyAxMC01IDM2LjctMTYgNzIuMy0zNy4zIDEwNy02NGwxMC04aDM5OTc4MnYtNDB6XFxubTggMHY0MGgzOTk3MzB2LTQwem0wIDE5NHY0MGgzOTk3MzB2LTQwelwiLFxuICAvLyBkb3VibGVyaWdodGFycm93IGlzIGZyb20gZ2x5cGggVSsyMUQyIGluIGZvbnQgS2FUZVggTWFpblxuICBkb3VibGVyaWdodGFycm93OiBcIk0zOTk3MzggMzkybFxcbi0xMCAxMGMtMzQgMzYtNjIuNyA3Ny04NiAxMjMtMy4zIDgtNSAxMy4zLTUgMTYgMCA1LjMgNi43IDggMjAgOCA3LjMgMCAxMi4yLS41XFxuIDE0LjUtMS41IDIuMy0xIDQuOC00LjUgNy41LTEwLjUgNDkuMy05Ny4zIDEyMS43LTE2OS4zIDIxNy0yMTYgMjgtMTQgNTcuMy0yNSA4OFxcbi0zMyA2LjctMiAxMS0zLjggMTMtNS41IDItMS43IDMtNC4yIDMtNy41cy0xLTUuOC0zLTcuNWMtMi0xLjctNi4zLTMuNS0xMy01LjUtNjhcXG4tMTcuMy0xMjguMi00Ny44LTE4MC41LTkxLjUtNTIuMy00My43LTkzLjgtOTYuMi0xMjQuNS0xNTcuNS05LjMtOC0xNS4zLTEyLjMtMThcXG4tMTNoLTZjLTEyIC43LTE4IDQtMTggMTAgMCAyIDEuNyA3IDUgMTUgMjMuMyA0NiA1MiA4NyA4NiAxMjNsMTAgMTBIMHY0MGgzOTk3ODJcXG5jLTMyOCAwIDAgMCAwIDBsMTAgOGMyNi43IDIwIDY1LjcgNDMgMTE3IDY5LTIuNyAyLTYgMy43LTEwIDUtMzYuNyAxNi03Mi4zIDM3LjNcXG4tMTA3IDY0bC0xMCA4SDB2NDB6TTAgMTU3djQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6XCIsXG4gIC8vIGxlZnRhcnJvdyBpcyBmcm9tIGdseXBoIFUrMjE5MCBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGFycm93OiBcIk00MDAwMDAgMjQxSDExMGwzLTNjNjguNy01Mi43IDExMy43LTEyMFxcbiAxMzUtMjAyIDQtMTQuNyA2LTIzIDYtMjUgMC03LjMtNy0xMS0yMS0xMS04IDAtMTMuMi44LTE1LjUgMi41LTIuMyAxLjctNC4yIDUuOFxcbi01LjUgMTIuNS0xLjMgNC43LTIuNyAxMC4zLTQgMTctMTIgNDguNy0zNC44IDkyLTY4LjUgMTMwUzY1LjMgMjI4LjMgMTggMjQ3XFxuYy0xMCA0LTE2IDcuNy0xOCAxMSAwIDguNyA2IDE0LjMgMTggMTcgNDcuMyAxOC43IDg3LjggNDcgMTIxLjUgODVTMTk2IDQ0MS4zIDIwOFxcbiA0OTBjLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMuMyAxLjMgMSAzLjMgMiA2czIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjNcXG4gMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEtMy43IDIxLTExIDAtMi0yLTEwLjMtNi0yNS0yMC03OS4zLTY1LTE0Ni43LTEzNS0yMDJcXG4gbC0zLTNoMzk5ODkwek0xMDAgMjQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIG92ZXJicmFjZSBpcyBmcm9tIGdseXBocyBVKzIzQTkvMjNBOC8yM0E3IGluIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICBsZWZ0YnJhY2U6IFwiTTYgNTQ4bC02LTZ2LTM1bDYtMTFjNTYtMTA0IDEzNS4zLTE4MS4zIDIzOC0yMzIgNTcuMy0yOC43IDExN1xcbi00NSAxNzktNTBoMzk5NTc3djEyMEg0MDNjLTQzLjMgNy04MSAxNS0xMTMgMjYtMTAwLjcgMzMtMTc5LjcgOTEtMjM3IDE3NC0yLjdcXG4gNS02IDktMTAgMTMtLjcgMS03LjMgMS0yMCAxSDZ6XCIsXG4gIGxlZnRicmFjZXVuZGVyOiBcIk0wIDZsNi02aDE3YzEyLjY4OCAwIDE5LjMxMy4zIDIwIDEgNCA0IDcuMzEzIDguMyAxMCAxM1xcbiAzNS4zMTMgNTEuMyA4MC44MTMgOTMuOCAxMzYuNSAxMjcuNSA1NS42ODggMzMuNyAxMTcuMTg4IDU1LjggMTg0LjUgNjYuNS42ODhcXG4gMCAyIC4zIDQgMSAxOC42ODggMi43IDc2IDQuMyAxNzIgNWgzOTk0NTB2MTIwSDQyOWwtNi0xYy0xMjQuNjg4LTgtMjM1LTYxLjdcXG4tMzMxLTE2MUM2MC42ODcgMTM4LjcgMzIuMzEyIDk5LjMgNyA1NEwwIDQxVjZ6XCIsXG4gIC8vIG92ZXJncm91cCBpcyBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlIChwdWJsaWMgZG9tYWluKVxuICBsZWZ0Z3JvdXA6IFwiTTQwMDAwMCA4MFxcbkg0MzVDNjQgODAgMTY4LjMgMjI5LjQgMjEgMjYwYy01LjkgMS4yLTE4IDAtMTggMC0yIDAtMy0xLTMtM3YtMzhDNzYgNjEgMjU3IDBcXG4gNDM1IDBoMzk5NTY1elwiLFxuICBsZWZ0Z3JvdXB1bmRlcjogXCJNNDAwMDAwIDI2Mlxcbkg0MzVDNjQgMjYyIDE2OC4zIDExMi42IDIxIDgyYy01LjktMS4yLTE4IDAtMTggMC0yIDAtMyAxLTMgM3YzOGM3NiAxNTggMjU3IDIxOVxcbiA0MzUgMjE5aDM5OTU2NXpcIixcbiAgLy8gSGFycG9vbnMgYXJlIGZyb20gZ2x5cGggVSsyMUJEIGluIGZvbnQgS2FUZVggTWFpblxuICBsZWZ0aGFycG9vbjogXCJNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuM1xcbi0zLjMgMTAuMi05LjUgMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1XFxuLTE4LjMgMy0yMS0xLjMtNC03LjMtNi0xOC02LTggMC0xMyAuNy0xNSAycy00LjcgNi43LTggMTZjLTQyIDk4LjctMTA3LjMgMTc0LjdcXG4tMTk2IDIyOC02LjcgNC43LTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpcIixcbiAgbGVmdGhhcnBvb25wbHVzOiBcIk0wIDI2N2MuNyA1LjMgMyAxMCA3IDE0aDM5OTk5M3YtNDBIOTNjMy4zLTMuMyAxMC4yLTkuNVxcbiAyMC41LTE4LjVzMTcuOC0xNS44IDIyLjUtMjAuNWM1MC43LTUyIDg4LTExMC4zIDExMi0xNzUgNC0xMS4zIDUtMTguMyAzLTIxLTEuM1xcbi00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNy0xOTYgMjI4LTYuNyA0LjdcXG4tMTAuNyA4LTEyIDEwLTEuMyAyLTIgNS43LTIgMTF6bTEwMC0yNnY0MGgzOTk5MDB2LTQwek0wIDQzNXY0MGg0MDAwMDB2LTQwelxcbm0wIDB2NDBoNDAwMDAwdi00MHpcIixcbiAgbGVmdGhhcnBvb25kb3duOiBcIk03IDI0MWMtNCA0LTYuMzMzIDguNjY3LTcgMTQgMCA1LjMzMy42NjcgOSAyIDExczUuMzMzXFxuIDUuMzMzIDEyIDEwYzkwLjY2NyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zMzMgMTAuNjY3IDYuMzMzIDE2LjMzMyA5IDE3IDIgLjY2NyA1XFxuIDEgOSAxaDVjMTAuNjY3IDAgMTYuNjY3LTIgMTgtNiAyLTIuNjY3IDEtOS42NjctMy0yMS0zMi04Ny4zMzMtODIuNjY3LTE1Ny42NjdcXG4tMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDB6TTkzIDI4MSBINDAwMDAwIHYtNDBMNyAyNDF6XCIsXG4gIGxlZnRoYXJwb29uZG93bnBsdXM6IFwiTTcgNDM1Yy00IDQtNi4zIDguNy03IDE0IDAgNS4zLjcgOSAyIDExczUuMyA1LjMgMTJcXG4gMTBjOTAuNyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zIDEwLjcgNi4zIDE2LjMgOSAxNyAyIC43IDUgMSA5IDFoNWMxMC43IDAgMTYuN1xcbi0yIDE4LTYgMi0yLjcgMS05LjctMy0yMS0zMi04Ny4zLTgyLjctMTU3LjctMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDBIN3ptOTMgMFxcbnY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwem0wIDB2NDBoMzk5OTAwdi00MHpcIixcbiAgLy8gaG9vayBpcyBmcm9tIGdseXBoIFUrMjFBOSBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGhvb2s6IFwiTTQwMDAwMCAyODEgSDEwM3MtMzMtMTEuMi02MS0zMy41UzAgMTk3LjMgMCAxNjRzMTQuMi02MS4yIDQyLjVcXG4tODMuNUM3MC44IDU4LjIgMTA0IDQ3IDE0MiA0NyBjMTYuNyAwIDI1IDYuNyAyNSAyMCAwIDEyLTguNyAxOC43LTI2IDIwLTQwIDMuM1xcbi02OC43IDE1LjctODYgMzctMTAgMTItMTUgMjUuMy0xNSA0MCAwIDIyLjcgOS44IDQwLjcgMjkuNSA1NCAxOS43IDEzLjMgNDMuNSAyMVxcbiA3MS41IDIzaDM5OTg1OXpNMTAzIDI4MXYtNDBoMzk5ODk3djQwelwiLFxuICBsZWZ0bGluZXNlZ21lbnQ6IFwiTTQwIDI4MSBWNDI4IEgwIFY5NCBINDAgVjI0MSBINDAwMDAwIHY0MHpcXG5NNDAgMjgxIFY0MjggSDAgVjk0IEg0MCBWMjQxIEg0MDAwMDAgdjQwelwiLFxuICBsZWZ0bWFwc3RvOiBcIk00MCAyODEgVjQ0OEgwVjc0SDQwVjI0MUg0MDAwMDB2NDB6XFxuTTQwIDI4MSBWNDQ4SDBWNzRINDBWMjQxSDQwMDAwMHY0MHpcIixcbiAgLy8gdG9mcm9tIGlzIGZyb20gZ2x5cGggVSsyMUM0IGluIGZvbnQgS2FUZVggQU1TIFJlZ3VsYXJcbiAgbGVmdFRvRnJvbTogXCJNMCAxNDdoNDAwMDAwdjQwSDB6bTAgMjE0YzY4IDQwIDExNS43IDk1LjcgMTQzIDE2N2gyMmMxNS4zIDAgMjNcXG4tLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjktNzAtMTAxbC03LThoMzk5OTA1di00MEg5NWw3LThcXG5jMjguNy0zMiA1Mi02NS43IDcwLTEwMSAxMC43LTIzLjMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDI2NS4zXFxuIDY4IDMyMSAwIDM2MXptMC0xNzR2LTQwaDM5OTkwMHY0MHptMTAwIDE1NHY0MGgzOTk5MDB2LTQwelwiLFxuICBsb25nZXF1YWw6IFwiTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6XFxuTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6XCIsXG4gIG1pZGJyYWNlOiBcIk0yMDA0MjggMzM0XFxuYy0xMDAuNy04LjMtMTk1LjMtNDQtMjgwLTEwOC01NS4zLTQyLTEwMS43LTkzLTEzOS0xNTNsLTktMTRjLTIuNyA0LTUuNyA4LjctOSAxNFxcbi01My4zIDg2LjctMTIzLjcgMTUzLTIxMSAxOTktNjYuNyAzNi0xMzcuMyA1Ni4zLTIxMiA2MkgwVjIxNGgxOTk1NjhjMTc4LjMtMTEuN1xcbiAzMTEuNy03OC4zIDQwMy0yMDEgNi04IDkuNy0xMiAxMS0xMiAuNy0uNyA2LjctMSAxOC0xczE3LjMuMyAxOCAxYzEuMyAwIDUgNCAxMVxcbiAxMiA0NC43IDU5LjMgMTAxLjMgMTA2LjMgMTcwIDE0MXMxNDUuMyA1NC4zIDIyOSA2MGgxOTk1NzJ2MTIwelwiLFxuICBtaWRicmFjZXVuZGVyOiBcIk0xOTk1NzIgMjE0XFxuYzEwMC43IDguMyAxOTUuMyA0NCAyODAgMTA4IDU1LjMgNDIgMTAxLjcgOTMgMTM5IDE1M2w5IDE0YzIuNy00IDUuNy04LjcgOS0xNFxcbiA1My4zLTg2LjcgMTIzLjctMTUzIDIxMS0xOTkgNjYuNy0zNiAxMzcuMy01Ni4zIDIxMi02MmgxOTk1Njh2MTIwSDIwMDQzMmMtMTc4LjNcXG4gMTEuNy0zMTEuNyA3OC4zLTQwMyAyMDEtNiA4LTkuNyAxMi0xMSAxMi0uNy43LTYuNyAxLTE4IDFzLTE3LjMtLjMtMTgtMWMtMS4zIDBcXG4tNS00LTExLTEyLTQ0LjctNTkuMy0xMDEuMy0xMDYuMy0xNzAtMTQxcy0xNDUuMy01NC4zLTIyOS02MEgwVjIxNHpcIixcbiAgb2lpbnRTaXplMTogXCJNNTEyLjYgNzEuNmMyNzIuNiAwIDMyMC4zIDEwNi44IDMyMC4zIDE3OC4yIDAgNzAuOC00Ny43IDE3Ny42XFxuLTMyMC4zIDE3Ny42UzE5My4xIDMyMC42IDE5My4xIDI0OS44YzAtNzEuNCA0Ni45LTE3OC4yIDMxOS41LTE3OC4yelxcbm0zNjguMSAxNzguMmMwLTg2LjQtNjAuOS0yMTUuNC0zNjguMS0yMTUuNC0zMDYuNCAwLTM2Ny4zIDEyOS0zNjcuMyAyMTUuNCAwIDg1LjhcXG42MC45IDIxNC44IDM2Ny4zIDIxNC44IDMwNy4yIDAgMzY4LjEtMTI5IDM2OC4xLTIxNC44elwiLFxuICBvaWludFNpemUyOiBcIk03NTcuOCAxMDAuMWMzODQuNyAwIDQ1MS4xIDEzNy42IDQ1MS4xIDIzMCAwIDkxLjMtNjYuNCAyMjguOFxcbi00NTEuMSAyMjguOC0zODYuMyAwLTQ1Mi43LTEzNy41LTQ1Mi43LTIyOC44IDAtOTIuNCA2Ni40LTIzMCA0NTIuNy0yMzB6XFxubTUwMi40IDIzMGMwLTExMS4yLTgyLjQtMjc3LjItNTAyLjQtMjc3LjJzLTUwNCAxNjYtNTA0IDI3Ny4yXFxuYzAgMTEwIDg0IDI3NiA1MDQgMjc2czUwMi40LTE2NiA1MDIuNC0yNzZ6XCIsXG4gIG9paWludFNpemUxOiBcIk02ODEuNCA3MS42YzQwOC45IDAgNDgwLjUgMTA2LjggNDgwLjUgMTc4LjIgMCA3MC44LTcxLjYgMTc3LjZcXG4tNDgwLjUgMTc3LjZTMjAyLjEgMzIwLjYgMjAyLjEgMjQ5LjhjMC03MS40IDcwLjUtMTc4LjIgNDc5LjMtMTc4LjJ6XFxubTUyNS44IDE3OC4yYzAtODYuNC04Ni44LTIxNS40LTUyNS43LTIxNS40LTQzNy45IDAtNTI0LjcgMTI5LTUyNC43IDIxNS40IDBcXG44NS44IDg2LjggMjE0LjggNTI0LjcgMjE0LjggNDM4LjkgMCA1MjUuNy0xMjkgNTI1LjctMjE0Ljh6XCIsXG4gIG9paWludFNpemUyOiBcIk0xMDIxLjIgNTNjNjAzLjYgMCA3MDcuOCAxNjUuOCA3MDcuOCAyNzcuMiAwIDExMC0xMDQuMiAyNzUuOFxcbi03MDcuOCAyNzUuOC02MDYgMC03MTAuMi0xNjUuOC03MTAuMi0yNzUuOEMzMTEgMjE4LjggNDE1LjIgNTMgMTAyMS4yIDUzelxcbm03NzAuNCAyNzcuMWMwLTEzMS4yLTEyNi40LTMyNy42LTc3MC41LTMyNy42UzI0OC40IDE5OC45IDI0OC40IDMzMC4xXFxuYzAgMTMwIDEyOC44IDMyNi40IDc3Mi43IDMyNi40czc3MC41LTE5Ni40IDc3MC41LTMyNi40elwiLFxuICByaWdodGFycm93OiBcIk0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4XFxuLTE2LjcgMzItMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjBcXG4gMTEgOCAwIDEzLjItLjggMTUuNS0yLjUgMi4zLTEuNyA0LjItNS41IDUuNS0xMS41IDItMTMuMyA1LjctMjcgMTEtNDEgMTQuNy00NC43XFxuIDM5LTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1XFxuLTQwLjUtMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41XFxuLTEyLjUtMi4zLTEuNy03LjUtMi41LTE1LjUtMi41LTE0IDAtMjEgMy43LTIxIDExIDAgMiAyIDEwLjMgNiAyNSAyMC43IDgzLjMgNjdcXG4gMTUxLjcgMTM5IDIwNXptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0YnJhY2U6IFwiTTQwMDAwMCA1NDJsXFxuLTYgNmgtMTdjLTEyLjcgMC0xOS4zLS4zLTIwLTEtNC00LTcuMy04LjMtMTAtMTMtMzUuMy01MS4zLTgwLjgtOTMuOC0xMzYuNS0xMjcuNVxcbnMtMTE3LjItNTUuOC0xODQuNS02Ni41Yy0uNyAwLTItLjMtNC0xLTE4LjctMi43LTc2LTQuMy0xNzItNUgwVjIxNGgzOTk1NzFsNiAxXFxuYzEyNC43IDggMjM1IDYxLjcgMzMxIDE2MSAzMS4zIDMzLjMgNTkuNyA3Mi43IDg1IDExOGw3IDEzdjM1elwiLFxuICByaWdodGJyYWNldW5kZXI6IFwiTTM5OTk5NCAwbDYgNnYzNWwtNiAxMWMtNTYgMTA0LTEzNS4zIDE4MS4zLTIzOCAyMzItNTcuM1xcbiAyOC43LTExNyA0NS0xNzkgNTBILTMwMFYyMTRoMzk5ODk3YzQzLjMtNyA4MS0xNSAxMTMtMjYgMTAwLjctMzMgMTc5LjctOTEgMjM3XFxuLTE3NCAyLjctNSA2LTkgMTAtMTMgLjctMSA3LjMtMSAyMC0xaDE3elwiLFxuICByaWdodGdyb3VwOiBcIk0wIDgwaDM5OTU2NWMzNzEgMCAyNjYuNyAxNDkuNCA0MTQgMTgwIDUuOSAxLjIgMTggMCAxOCAwIDIgMFxcbiAzLTEgMy0zdi0zOGMtNzYtMTU4LTI1Ny0yMTktNDM1LTIxOUgwelwiLFxuICByaWdodGdyb3VwdW5kZXI6IFwiTTAgMjYyaDM5OTU2NWMzNzEgMCAyNjYuNy0xNDkuNCA0MTQtMTgwIDUuOS0xLjIgMTggMCAxOFxcbiAwIDIgMCAzIDEgMyAzdjM4Yy03NiAxNTgtMjU3IDIxOS00MzUgMjE5SDB6XCIsXG4gIHJpZ2h0aGFycG9vbjogXCJNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuM1xcbi0zLjctMTUuMy0xMS0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMlxcbi0xMC43IDAtMTYuNyAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNThcXG4gNjkuMiA5MiA5NC41em0wIDB2NDBoMzk5OTAwdi00MHpcIixcbiAgcmlnaHRoYXJwb29ucGx1czogXCJNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuMy0zLjctMTUuMy0xMVxcbi0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMi0xMC43IDAtMTYuN1xcbiAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTggNjkuMiA5MiA5NC41elxcbm0wIDB2NDBoMzk5OTAwdi00MHogbTEwMCAxOTR2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0aGFycG9vbmRvd246IFwiTTM5OTc0NyA1MTFjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOCAxNS0yLjVzNC43LTYuOFxcbiA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMyA4LjUtNS44IDkuNVxcbi03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuMy02NC43IDU3LTkyIDk1XFxuLTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCAyNDF2NDBoMzk5OTAwdi00MHpcIixcbiAgcmlnaHRoYXJwb29uZG93bnBsdXM6IFwiTTM5OTc0NyA3MDVjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOFxcbiAxNS0yLjVzNC43LTYuOCA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuM1xcbiA4LjUtNS44IDkuNS03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuM1xcbi02NC43IDU3LTkyIDk1LTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCA0MzV2NDBoMzk5OTAwdi00MHpcXG5tMC0xOTR2NDBoNDAwMDAwdi00MHptMCAwdjQwaDQwMDAwMHYtNDB6XCIsXG4gIHJpZ2h0aG9vazogXCJNMzk5ODU5IDI0MWMtNzY0IDAgMCAwIDAgMCA0MC0zLjMgNjguNy0xNS43IDg2LTM3IDEwLTEyIDE1LTI1LjNcXG4gMTUtNDAgMC0yMi43LTkuOC00MC43LTI5LjUtNTQtMTkuNy0xMy4zLTQzLjUtMjEtNzEuNS0yMy0xNy4zLTEuMy0yNi04LTI2LTIwIDBcXG4tMTMuMyA4LjctMjAgMjYtMjAgMzggMCA3MSAxMS4yIDk5IDMzLjUgMCAwIDcgNS42IDIxIDE2LjcgMTQgMTEuMiAyMSAzMy41IDIxXFxuIDY2LjhzLTE0IDYxLjItNDIgODMuNWMtMjggMjIuMy02MSAzMy41LTk5IDMzLjVMMCAyNDF6IE0wIDI4MXYtNDBoMzk5ODU5djQwelwiLFxuICByaWdodGxpbmVzZWdtZW50OiBcIk0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHpcXG5NMzk5OTYwIDI0MSBWOTQgaDQwIFY0MjggaC00MCBWMjgxIEgwIHYtNDB6XCIsXG4gIHJpZ2h0VG9Gcm9tOiBcIk00MDAwMDAgMTY3Yy03MC43LTQyLTExOC05Ny43LTE0Mi0xNjdoLTIzYy0xNS4zIDAtMjMgLjMtMjNcXG4gMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zIDQxLjMgNjkgNzAgMTAxbDcgOEgwdjQwaDM5OTkwNWwtNyA4Yy0yOC43IDMyXFxuLTUyIDY1LjctNzAgMTAxLTEwLjcgMjMuMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyM2MyNC02OS4zIDcxLjMtMTI1IDE0Mlxcbi0xNjd6IE0xMDAgMTQ3djQwaDM5OTkwMHYtNDB6TTAgMzQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIHR3b2hlYWRsZWZ0YXJyb3cgaXMgZnJvbSBnbHlwaCBVKzIxOUUgaW4gZm9udCBLYVRlWCBBTVMgUmVndWxhclxuICB0d29oZWFkbGVmdGFycm93OiBcIk0wIDE2N2M2OCA0MFxcbiAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzLS4zIDIzLTEgMC0xLjMtNS4zLTEzLjctMTYtMzctMTgtMzUuMy00MS4zLTY5XFxuLTcwLTEwMWwtNy04aDEyNWw5IDdjNTAuNyAzOS4zIDg1IDg2IDEwMyAxNDBoNDZjMC00LjctNi4zLTE4LjctMTktNDItMTgtMzUuM1xcbi00MC02Ny4zLTY2LTk2bC05LTloMzk5NzE2di00MEgyODRsOS05YzI2LTI4LjcgNDgtNjAuNyA2Ni05NiAxMi43LTIzLjMzMyAxOVxcbi0zNy4zMzMgMTktNDJoLTQ2Yy0xOCA1NC01Mi4zIDEwMC43LTEwMyAxNDBsLTkgN0g5NWw3LThjMjguNy0zMiA1Mi02NS43IDcwLTEwMVxcbiAxMC43LTIzLjMzMyAxNi0zNS43IDE2LTM3IDAtLjctNy43LTEtMjMtMWgtMjJDMTE1LjcgNzEuMyA2OCAxMjcgMCAxNjd6XCIsXG4gIHR3b2hlYWRyaWdodGFycm93OiBcIk00MDAwMDAgMTY3XFxuYy02OC00MC0xMTUuNy05NS43LTE0My0xNjdoLTIyYy0xNS4zIDAtMjMgLjMtMjMgMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zXFxuIDQxLjMgNjkgNzAgMTAxbDcgOGgtMTI1bC05LTdjLTUwLjctMzkuMy04NS04Ni0xMDMtMTQwaC00NmMwIDQuNyA2LjMgMTguNyAxOSA0MlxcbiAxOCAzNS4zIDQwIDY3LjMgNjYgOTZsOSA5SDB2NDBoMzk5NzE2bC05IDljLTI2IDI4LjctNDggNjAuNy02NiA5Ni0xMi43IDIzLjMzM1xcbi0xOSAzNy4zMzMtMTkgNDJoNDZjMTgtNTQgNTIuMy0xMDAuNyAxMDMtMTQwbDktN2gxMjVsLTcgOGMtMjguNyAzMi01MiA2NS43LTcwXFxuIDEwMS0xMC43IDIzLjMzMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyMmMyNy4zLTcxLjMgNzUtMTI3IDE0My0xNjd6XCIsXG4gIC8vIHRpbGRlMSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSBnbHlwaCBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlXG4gIHRpbGRlMTogXCJNMjAwIDU1LjUzOGMtNzcgMC0xNjggNzMuOTUzLTE3NyA3My45NTMtMyAwLTdcXG4tMi4xNzUtOS01LjQzN0wyIDk3Yy0xLTItMi00LTItNiAwLTQgMi03IDUtOWwyMC0xMkMxMTYgMTIgMTcxIDAgMjA3IDBjODYgMFxcbiAxMTQgNjggMTkxIDY4IDc4IDAgMTY4LTY4IDE3Ny02OCA0IDAgNyAyIDkgNWwxMiAxOWMxIDIuMTc1IDIgNC4zNSAyIDYuNTI1IDBcXG4gNC4zNS0yIDcuNjEzLTUgOS43ODhsLTE5IDEzLjA1Yy05MiA2My4wNzctMTE2LjkzNyA3NS4zMDgtMTgzIDc2LjEyOFxcbi02OC4yNjcuODQ3LTExMy03My45NTItMTkxLTczLjk1MnpcIixcbiAgLy8gZGl0dG8gdGlsZGUyLCB0aWxkZTMsICYgdGlsZGU0XG4gIHRpbGRlMjogXCJNMzQ0IDU1LjI2NmMtMTQyIDAtMzAwLjYzOCA4MS4zMTYtMzExLjUgODYuNDE4XFxuLTguMDEgMy43NjItMjIuNSAxMC45MS0yMy41IDUuNTYyTDEgMTIwYy0xLTItMS0zLTEtNCAwLTUgMy05IDgtMTBsMTguNC05QzE2MC45XFxuIDMxLjkgMjgzIDAgMzU4IDBjMTQ4IDAgMTg4IDEyMiAzMzEgMTIyczMxNC05NyAzMjYtOTdjNCAwIDggMiAxMCA3bDcgMjEuMTE0XFxuYzEgMi4xNCAxIDMuMjEgMSA0LjI4IDAgNS4zNDctMyA5LjYyNi03IDEwLjY5NmwtMjIuMyAxMi42MjJDODUyLjYgMTU4LjM3MiA3NTFcXG4gMTgxLjQ3NiA2NzYgMTgxLjQ3NmMtMTQ5IDAtMTg5LTEyNi4yMS0zMzItMTI2LjIxelwiLFxuICB0aWxkZTM6IFwiTTc4NiA1OUM0NTcgNTkgMzIgMTc1LjI0MiAxMyAxNzUuMjQyYy02IDAtMTAtMy40NTdcXG4tMTEtMTAuMzdMLjE1IDEzOGMtMS03IDMtMTIgMTAtMTNsMTkuMi02LjRDMzc4LjQgNDAuNyA2MzQuMyAwIDgwNC4zIDBjMzM3IDBcXG4gNDExLjggMTU3IDc0Ni44IDE1NyAzMjggMCA3NTQtMTEyIDc3My0xMTIgNSAwIDEwIDMgMTEgOWwxIDE0LjA3NWMxIDguMDY2LS42OTdcXG4gMTYuNTk1LTYuNjk3IDE3LjQ5MmwtMjEuMDUyIDcuMzFjLTM2Ny45IDk4LjE0Ni02MDkuMTUgMTIyLjY5Ni03NzguMTUgMTIyLjY5NlxcbiAtMzM4IDAtNDA5LTE1Ni41NzMtNzQ0LTE1Ni41NzN6XCIsXG4gIHRpbGRlNDogXCJNNzg2IDU4QzQ1NyA1OCAzMiAxNzcuNDg3IDEzIDE3Ny40ODdjLTYgMC0xMC0zLjM0NVxcbi0xMS0xMC4wMzVMLjE1IDE0M2MtMS03IDMtMTIgMTAtMTNsMjItNi43QzM4MS4yIDM1IDYzNy4xNSAwIDgwNy4xNSAwYzMzNyAwIDQwOVxcbiAxNzcgNzQ0IDE3NyAzMjggMCA3NTQtMTI3IDc3My0xMjcgNSAwIDEwIDMgMTEgOWwxIDE0Ljc5NGMxIDcuODA1LTMgMTMuMzgtOVxcbiAxNC40OTVsLTIwLjcgNS41NzRjLTM2Ni44NSA5OS43OS02MDcuMyAxMzkuMzcyLTc3Ni4zIDEzOS4zNzItMzM4IDAtNDA5XFxuIC0xNzUuMjM2LTc0NC0xNzUuMjM2elwiLFxuICAvLyB2ZWMgaXMgZnJvbSBnbHlwaCBVKzIwRDcgaW4gZm9udCBLYVRlWCBNYWluXG4gIHZlYzogXCJNMzc3IDIwYzAtNS4zMzMgMS44MzMtMTAgNS41LTE0UzM5MSAwIDM5NyAwYzQuNjY3IDAgOC42NjcgMS42NjcgMTIgNVxcbjMuMzMzIDIuNjY3IDYuNjY3IDkgMTAgMTkgNi42NjcgMjQuNjY3IDIwLjMzMyA0My42NjcgNDEgNTcgNy4zMzMgNC42NjcgMTFcXG4xMC42NjcgMTEgMTggMCA2LTEgMTAtMyAxMnMtNi42NjcgNS0xNCA5Yy0yOC42NjcgMTQuNjY3LTUzLjY2NyAzNS42NjctNzUgNjNcXG4tMS4zMzMgMS4zMzMtMy4xNjcgMy41LTUuNSA2LjVzLTQgNC44MzMtNSA1LjVjLTEgLjY2Ny0yLjUgMS4zMzMtNC41IDJzLTQuMzMzIDFcXG4tNyAxYy00LjY2NyAwLTkuMTY3LTEuODMzLTEzLjUtNS41UzMzNyAxODQgMzM3IDE3OGMwLTEyLjY2NyAxNS42NjctMzIuMzMzIDQ3LTU5XFxuSDIxM2wtMTcxLTFjLTguNjY3LTYtMTMtMTIuMzMzLTEzLTE5IDAtNC42NjcgNC4zMzMtMTEuMzMzIDEzLTIwaDM1OVxcbmMtMTYtMjUuMzMzLTI0LTQ1LTI0LTU5elwiLFxuICAvLyB3aWRlaGF0MSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSBnbHlwaCBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlXG4gIHdpZGVoYXQxOiBcIk01MjkgMGg1bDUxOSAxMTVjNSAxIDkgNSA5IDEwIDAgMS0xIDItMSAzbC00IDIyXFxuYy0xIDUtNSA5LTExIDloLTJMNTMyIDY3IDE5IDE1OWgtMmMtNSAwLTktNC0xMS05bC01LTIyYy0xLTYgMi0xMiA4LTEzelwiLFxuICAvLyBkaXR0byB3aWRlaGF0Miwgd2lkZWhhdDMsICYgd2lkZWhhdDRcbiAgd2lkZWhhdDI6IFwiTTExODEgMGgybDExNzEgMTc2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMFxcbi0xMSAxMGgtMUwxMTgyIDY3IDE1IDIyMGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExelwiLFxuICB3aWRlaGF0MzogXCJNMTE4MSAwaDJsMTE3MSAyMzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwXFxuLTExIDEwaC0xTDExODIgNjcgMTUgMjgwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6XCIsXG4gIHdpZGVoYXQ0OiBcIk0xMTgxIDBoMmwxMTcxIDI5NmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTBcXG4tMTEgMTBoLTFMMTE4MiA2NyAxNSAzNDBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpcIixcbiAgLy8gd2lkZWNoZWNrIHBhdGhzIGFyZSBhbGwgaW52ZXJ0ZWQgdmVyc2lvbnMgb2Ygd2lkZWhhdFxuICB3aWRlY2hlY2sxOiBcIk01MjksMTU5aDVsNTE5LC0xMTVjNSwtMSw5LC01LDksLTEwYzAsLTEsLTEsLTIsLTEsLTNsLTQsLTIyYy0xLFxcbi01LC01LC05LC0xMSwtOWgtMmwtNTEyLDkybC01MTMsLTkyaC0yYy01LDAsLTksNCwtMTEsOWwtNSwyMmMtMSw2LDIsMTIsOCwxM3pcIixcbiAgd2lkZWNoZWNrMjogXCJNMTE4MSwyMjBoMmwxMTcxLC0xNzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLFxcbi0xMSwtMTBoLTFsLTExNjgsMTUzbC0xMTY3LC0xNTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExelwiLFxuICB3aWRlY2hlY2szOiBcIk0xMTgxLDI4MGgybDExNzEsLTIzNmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsXFxuLTExLC0xMGgtMWwtMTE2OCwyMTNsLTExNjcsLTIxM2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6XCIsXG4gIHdpZGVjaGVjazQ6IFwiTTExODEsMzQwaDJsMTE3MSwtMjk2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCxcXG4tMTEsLTEwaC0xbC0xMTY4LDI3M2wtMTE2NywtMjczaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpcIixcbiAgLy8gVGhlIG5leHQgdGVuIHBhdGhzIHN1cHBvcnQgcmVhY3Rpb24gYXJyb3dzIGZyb20gdGhlIG1oY2hlbSBwYWNrYWdlLlxuICAvLyBBcnJvd3MgZm9yIFxcY2V7PC0tPn0gYXJlIG9mZnNldCBmcm9tIHhBeGlzIGJ5IDAuMjJleCwgcGVyIG1oY2hlbSBpbiBMYVRlWFxuICAvLyBiYXJhYm92ZWxlZnRhcnJvdyBpcyBtb3N0bHkgZnJvbSBnbHlwaCBVKzIxOTAgaW4gZm9udCBLYVRlWCBNYWluXG4gIGJhcmFib3ZlbGVmdGFycm93OiBcIk00MDAwMDAgNjIwaC0zOTk4OTBsMyAtM2M2OC43IC01Mi43IDExMy43IC0xMjAgMTM1IC0yMDJcXG5jNCAtMTQuNyA2IC0yMyA2IC0yNWMwIC03LjMgLTcgLTExIC0yMSAtMTFjLTggMCAtMTMuMiAwLjggLTE1LjUgMi41XFxuYy0yLjMgMS43IC00LjIgNS44IC01LjUgMTIuNWMtMS4zIDQuNyAtMi43IDEwLjMgLTQgMTdjLTEyIDQ4LjcgLTM0LjggOTIgLTY4LjUgMTMwXFxucy03NC4yIDY2LjMgLTEyMS41IDg1Yy0xMCA0IC0xNiA3LjcgLTE4IDExYzAgOC43IDYgMTQuMyAxOCAxN2M0Ny4zIDE4LjcgODcuOCA0N1xcbjEyMS41IDg1czU2LjUgODEuMyA2OC41IDEzMGMwLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMwLjMgMS4zIDEgMy4zIDIgNlxcbnMyLjIgNC41IDMuNSA1LjVjMS4zIDEgMy4zIDEuOCA2IDIuNXM2IDEgMTAgMWMxNCAwIDIxIC0zLjcgMjEgLTExXFxuYzAgLTIgLTIgLTEwLjMgLTYgLTI1Yy0yMCAtNzkuMyAtNjUgLTE0Ni43IC0xMzUgLTIwMmwtMyAtM2gzOTk4OTB6XFxuTTEwMCA2MjB2NDBoMzk5OTAwdi00MHogTTAgMjQxdjQwaDM5OTkwMHYtNDB6TTAgMjQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIHJpZ2h0YXJyb3dhYm92ZWJhciBpcyBtb3N0bHkgZnJvbSBnbHlwaCBVKzIxOTIsIEthVGVYIE1haW5cbiAgcmlnaHRhcnJvd2Fib3ZlYmFyOiBcIk0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4LTE2LjcgMzJcXG4tMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjAgMTEgOCAwXFxuMTMuMi0uOCAxNS41LTIuNSAyLjMtMS43IDQuMi01LjUgNS41LTExLjUgMi0xMy4zIDUuNy0yNyAxMS00MSAxNC43LTQ0LjcgMzlcXG4tODQuNSA3My0xMTkuNXM3My43LTYwLjIgMTE5LTc1LjVjNi0yIDktNS43IDktMTFzLTMtOS05LTExYy00NS4zLTE1LjMtODUtNDAuNVxcbi0xMTktNzUuNXMtNTguMy03NC44LTczLTExOS41Yy00LjctMTQtOC4zLTI3LjMtMTEtNDAtMS4zLTYuNy0zLjItMTAuOC01LjVcXG4tMTIuNS0yLjMtMS43LTcuNS0yLjUtMTUuNS0yLjUtMTQgMC0yMSAzLjctMjEgMTEgMCAyIDIgMTAuMyA2IDI1IDIwLjcgODMuMyA2N1xcbjE1MS43IDEzOSAyMDV6bTk2IDM3OWgzOTk4OTR2NDBIMHptMCAwaDM5OTkwNHY0MEgwelwiLFxuICAvLyBUaGUgc2hvcnQgbGVmdCBoYXJwb29uIGhhcyAwLjVlbSAoaS5lLiA1MDAgdW5pdHMpIGtlcm4gb24gdGhlIGxlZnQgZW5kLlxuICAvLyBSZWYgZnJvbSBtaGNoZW0uc3R5OiBcXHJsYXB7XFxyYWlzZWJveHstLjIyZXh9eyRcXGtlcm4wLjVlbVxuICBiYXJhYm92ZXNob3J0bGVmdGhhcnBvb246IFwiTTUwNyw0MzVjLTQsNCwtNi4zLDguNywtNywxNGMwLDUuMywwLjcsOSwyLDExXFxuYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxN1xcbmMyLDAuNyw1LDEsOSwxYzAsMCw1LDAsNSwwYzEwLjcsMCwxNi43LC0yLDE4LC02YzIsLTIuNywxLC05LjcsLTMsLTIxXFxuYy0zMiwtODcuMywtODIuNywtMTU3LjcsLTE1MiwtMjExYzAsMCwtMywtMywtMywtM2wzOTkzNTEsMGwwLC00MFxcbmMtMzk4NTcwLDAsLTM5OTQzNywwLC0zOTk0MzcsMHogTTU5MyA0MzUgdjQwIEgzOTk1MDAgdi00MHpcXG5NMCAyODEgdi00MCBIMzk5OTA4IHY0MHogTTAgMjgxIHYtNDAgSDM5OTkwOCB2NDB6XCIsXG4gIHJpZ2h0aGFycG9vbmFib3Zlc2hvcnRiYXI6IFwiTTAsMjQxIGwwLDQwYzM5OTEyNiwwLDM5OTk5MywwLDM5OTk5MywwXFxuYzQuNywtNC43LDcsLTkuMyw3LC0xNGMwLC05LjMsLTMuNywtMTUuMywtMTEsLTE4Yy05Mi43LC01Ni43LC0xNTksLTEzMy43LC0xOTksXFxuLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNlxcbmMtMiwyLjcsLTEsOS43LDMsMjFjMTUuMyw0MiwzNi43LDgxLjgsNjQsMTE5LjVjMjcuMywzNy43LDU4LDY5LjIsOTIsOTQuNXpcXG5NMCAyNDEgdjQwIEgzOTk5MDggdi00MHogTTAgNDc1IHYtNDAgSDM5OTUwMCB2NDB6IE0wIDQ3NSB2LTQwIEgzOTk1MDAgdjQwelwiLFxuICBzaG9ydGJhcmFib3ZlbGVmdGhhcnBvb246IFwiTTcsNDM1Yy00LDQsLTYuMyw4LjcsLTcsMTRjMCw1LjMsMC43LDksMiwxMVxcbmMxLjMsMiw1LjMsNS4zLDEyLDEwYzkwLjcsNTQsMTU2LDEzMCwxOTYsMjI4YzMuMywxMC43LDYuMywxNi4zLDksMTdjMiwwLjcsNSwxLDksXFxuMWMwLDAsNSwwLDUsMGMxMC43LDAsMTYuNywtMiwxOCwtNmMyLC0yLjcsMSwtOS43LC0zLC0yMWMtMzIsLTg3LjMsLTgyLjcsLTE1Ny43LFxcbi0xNTIsLTIxMWMwLDAsLTMsLTMsLTMsLTNsMzk5OTA3LDBsMCwtNDBjLTM5OTEyNiwwLC0zOTk5OTMsMCwtMzk5OTkzLDB6XFxuTTkzIDQzNSB2NDAgSDQwMDAwMCB2LTQweiBNNTAwIDI0MSB2NDAgSDQwMDAwMCB2LTQweiBNNTAwIDI0MSB2NDAgSDQwMDAwMCB2LTQwelwiLFxuICBzaG9ydHJpZ2h0aGFycG9vbmFib3ZlYmFyOiBcIk01MywyNDFsMCw0MGMzOTg1NzAsMCwzOTk0MzcsMCwzOTk0MzcsMFxcbmM0LjcsLTQuNyw3LC05LjMsNywtMTRjMCwtOS4zLC0zLjcsLTE1LjMsLTExLC0xOGMtOTIuNywtNTYuNywtMTU5LC0xMzMuNywtMTk5LFxcbi0yMzFjLTMuMywtOS4zLC02LC0xNC43LC04LC0xNmMtMiwtMS4zLC03LC0yLC0xNSwtMmMtMTAuNywwLC0xNi43LDIsLTE4LDZcXG5jLTIsMi43LC0xLDkuNywzLDIxYzE1LjMsNDIsMzYuNyw4MS44LDY0LDExOS41YzI3LjMsMzcuNyw1OCw2OS4yLDkyLDk0LjV6XFxuTTUwMCAyNDEgdjQwIEgzOTk0MDggdi00MHogTTUwMCA0MzUgdjQwIEg0MDAwMDAgdi00MHpcIlxufTtcbnZhciB0YWxsRGVsaW0gPSBmdW5jdGlvbiB0YWxsRGVsaW0obGFiZWwsIG1pZEhlaWdodCkge1xuICBzd2l0Y2ggKGxhYmVsKSB7XG4gICAgY2FzZSBcImxicmFja1wiOlxuICAgICAgcmV0dXJuIFwiTTQwMyAxNzU5IFY4NCBINjY2IFYwIEgzMTkgVjE3NTkgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjE3NTkgaDM0NyB2LTg0XFxuSDQwM3ogTTQwMyAxNzU5IFYwIEgzMTkgVjE3NTkgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjE3NTkgaDg0elwiO1xuXG4gICAgY2FzZSBcInJicmFja1wiOlxuICAgICAgcmV0dXJuIFwiTTM0NyAxNzU5IFYwIEgwIFY4NCBIMjYzIFYxNzU5IHZcIiArIG1pZEhlaWdodCArIFwiIHYxNzU5IEgwIHY4NCBIMzQ3elxcbk0zNDcgMTc1OSBWMCBIMjYzIFYxNzU5IHZcIiArIG1pZEhlaWdodCArIFwiIHYxNzU5IGg4NHpcIjtcblxuICAgIGNhc2UgXCJ2ZXJ0XCI6XG4gICAgICByZXR1cm4gXCJNMTQ1IDE1IHY1ODUgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTVcXG5jMTAsMCwxNi42NjcsLTUsMjAsLTE1IHYtNTg1IHZcIiArIC1taWRIZWlnaHQgKyBcIiB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTVcXG5jLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTE4OCAxNSBIMTQ1IHY1ODUgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjU4NSBoNDN6XCI7XG5cbiAgICBjYXNlIFwiZG91YmxldmVydFwiOlxuICAgICAgcmV0dXJuIFwiTTE0NSAxNSB2NTg1IHZcIiArIG1pZEhlaWdodCArIFwiIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1XFxuYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2XCIgKyAtbWlkSGVpZ2h0ICsgXCIgdi01ODUgYy0yLjY2NywtMTAsLTkuNjY3LC0xNSwtMjEsLTE1XFxuYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE0xODggMTUgSDE0NSB2NTg1IHZcIiArIG1pZEhlaWdodCArIFwiIHY1ODUgaDQzelxcbk0zNjcgMTUgdjU4NSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NTg1IGMyLjY2NywxMCw5LjY2NywxNSwyMSwxNVxcbmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdlwiICsgLW1pZEhlaWdodCArIFwiIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNVxcbmMtMTAsMCwtMTYuNjY3LDUsLTIwLDE1eiBNNDEwIDE1IEgzNjcgdjU4NSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NTg1IGg0M3pcIjtcblxuICAgIGNhc2UgXCJsZmxvb3JcIjpcbiAgICAgIHJldHVybiBcIk0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2MTcxNSBoMjYzIHY4NCBIMzE5elxcbk1NMzE5IDYwMiBWMCBINDAzIFY2MDIgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjE3MTUgSDMxOXpcIjtcblxuICAgIGNhc2UgXCJyZmxvb3JcIjpcbiAgICAgIHJldHVybiBcIk0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2MTc5OSBIMCB2LTg0IEgzMTl6XFxuTU0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2MTcxNSBIMzE5elwiO1xuXG4gICAgY2FzZSBcImxjZWlsXCI6XG4gICAgICByZXR1cm4gXCJNNDAzIDE3NTkgVjg0IEg2NjYgVjAgSDMxOSBWMTc1OSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NjAyIGg4NHpcXG5NNDAzIDE3NTkgVjAgSDMxOSBWMTc1OSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NjAyIGg4NHpcIjtcblxuICAgIGNhc2UgXCJyY2VpbFwiOlxuICAgICAgcmV0dXJuIFwiTTM0NyAxNzU5IFYwIEgwIFY4NCBIMjYzIFYxNzU5IHZcIiArIG1pZEhlaWdodCArIFwiIHY2MDIgaDg0elxcbk0zNDcgMTc1OSBWMCBoLTg0IFYxNzU5IHZcIiArIG1pZEhlaWdodCArIFwiIHY2MDIgaDg0elwiO1xuXG4gICAgY2FzZSBcImxwYXJlblwiOlxuICAgICAgcmV0dXJuIFwiTTg2Myw5YzAsLTIsLTIsLTUsLTYsLTljMCwwLC0xNywwLC0xNywwYy0xMi43LDAsLTE5LjMsMC4zLC0yMCwxXFxuYy01LjMsNS4zLC0xMC4zLDExLC0xNSwxN2MtMjQyLjcsMjk0LjcsLTM5NS4zLDY4MiwtNDU4LDExNjJjLTIxLjMsMTYzLjMsLTMzLjMsMzQ5LFxcbi0zNiw1NTcgbDAsXCIgKyAobWlkSGVpZ2h0ICsgODQpICsgXCJjMC4yLDYsMCwyNiwwLDYwYzIsMTU5LjMsMTAsMzEwLjcsMjQsNDU0YzUzLjMsNTI4LDIxMCxcXG45NDkuNyw0NzAsMTI2NWM0LjcsNiw5LjcsMTEuNywxNSwxN2MwLjcsMC43LDcsMSwxOSwxYzAsMCwxOCwwLDE4LDBjNCwtNCw2LC03LDYsLTlcXG5jMCwtMi43LC0zLjMsLTguNywtMTAsLTE4Yy0xMzUuMywtMTkyLjcsLTIzNS41LC00MTQuMywtMzAwLjUsLTY2NWMtNjUsLTI1MC43LC0xMDIuNSxcXG4tNTQ0LjcsLTExMi41LC04ODJjLTIsLTEwNCwtMywtMTY3LC0zLC0xODlcXG5sMCwtXCIgKyAobWlkSGVpZ2h0ICsgOTIpICsgXCJjMCwtMTYyLjcsNS43LC0zMTQsMTcsLTQ1NGMyMC43LC0yNzIsNjMuNywtNTEzLDEyOSwtNzIzYzY1LjMsXFxuLTIxMCwxNTUuMywtMzk2LjMsMjcwLC01NTljNi43LC05LjMsMTAsLTE1LjMsMTAsLTE4elwiO1xuXG4gICAgY2FzZSBcInJwYXJlblwiOlxuICAgICAgcmV0dXJuIFwiTTc2LDBjLTE2LjcsMCwtMjUsMywtMjUsOWMwLDIsMiw2LjMsNiwxM2MyMS4zLDI4LjcsNDIuMyw2MC4zLFxcbjYzLDk1Yzk2LjcsMTU2LjcsMTcyLjgsMzMyLjUsMjI4LjUsNTI3LjVjNTUuNywxOTUsOTIuOCw0MTYuNSwxMTEuNSw2NjQuNVxcbmMxMS4zLDEzOS4zLDE3LDI5MC43LDE3LDQ1NGMwLDI4LDEuNyw0MywzLjMsNDVsMCxcIiArIChtaWRIZWlnaHQgKyA5KSArIFwiXFxuYy0zLDQsLTMuMywxNi43LC0zLjMsMzhjMCwxNjIsLTUuNywzMTMuNywtMTcsNDU1Yy0xOC43LDI0OCwtNTUuOCw0NjkuMywtMTExLjUsNjY0XFxuYy01NS43LDE5NC43LC0xMzEuOCwzNzAuMywtMjI4LjUsNTI3Yy0yMC43LDM0LjcsLTQxLjcsNjYuMywtNjMsOTVjLTIsMy4zLC00LDcsLTYsMTFcXG5jMCw3LjMsNS43LDExLDE3LDExYzAsMCwxMSwwLDExLDBjOS4zLDAsMTQuMywtMC4zLDE1LC0xYzUuMywtNS4zLDEwLjMsLTExLDE1LC0xN1xcbmMyNDIuNywtMjk0LjcsMzk1LjMsLTY4MS43LDQ1OCwtMTE2MWMyMS4zLC0xNjQuNywzMy4zLC0zNTAuNywzNiwtNTU4XFxubDAsLVwiICsgKG1pZEhlaWdodCArIDE0NCkgKyBcImMtMiwtMTU5LjMsLTEwLC0zMTAuNywtMjQsLTQ1NGMtNTMuMywtNTI4LC0yMTAsLTk0OS43LFxcbi00NzAsLTEyNjVjLTQuNywtNiwtOS43LC0xMS43LC0xNSwtMTdjLTAuNywtMC43LC02LjcsLTEsLTE4LC0xelwiO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFdlIHNob3VsZCBub3QgZXZlciBnZXQgaGVyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gc3RyZXRjaHkgZGVsaW1pdGVyLlwiKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIGRvY3VtZW50IGZyYWdtZW50LCB3aGljaCBjb250YWlucyBlbGVtZW50cywgYnV0IHdoZW5cbiAqIHBsYWNlZCBpbnRvIHRoZSBET00gZG9lc24ndCBoYXZlIGFueSByZXByZXNlbnRhdGlvbiBpdHNlbGYuIEl0IG9ubHkgY29udGFpbnNcbiAqIGNoaWxkcmVuIGFuZCBkb2Vzbid0IGhhdmUgYW55IERPTSBub2RlIHByb3BlcnRpZXMuXG4gKi9cbmNsYXNzIERvY3VtZW50RnJhZ21lbnQge1xuICAvLyBIdG1sRG9tTm9kZVxuICAvLyBOZXZlciB1c2VkOyBuZWVkZWQgZm9yIHNhdGlzZnlpbmcgaW50ZXJmYWNlLlxuICBjb25zdHJ1Y3RvcihjaGlsZHJlbikge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5jbGFzc2VzID0gdm9pZCAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLmNsYXNzZXMgPSBbXTtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG4gICAgdGhpcy5kZXB0aCA9IDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IDA7XG4gICAgdGhpcy5zdHlsZSA9IHt9O1xuICB9XG5cbiAgaGFzQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIHV0aWxzLmNvbnRhaW5zKHRoaXMuY2xhc3NlcywgY2xhc3NOYW1lKTtcbiAgfVxuICAvKiogQ29udmVydCB0aGUgZnJhZ21lbnQgaW50byBhIG5vZGUuICovXG5cblxuICB0b05vZGUoKSB7XG4gICAgdmFyIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZyYWcuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlbltpXS50b05vZGUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYWc7XG4gIH1cbiAgLyoqIENvbnZlcnQgdGhlIGZyYWdtZW50IGludG8gSFRNTCBtYXJrdXAuICovXG5cblxuICB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCJcIjsgLy8gU2ltcGx5IGNvbmNhdGVuYXRlIHRoZSBtYXJrdXAgZm9yIHRoZSBjaGlsZHJlbiB0b2dldGhlci5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbWFya3VwICs9IHRoaXMuY2hpbGRyZW5baV0udG9NYXJrdXAoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya3VwO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYSBzdHJpbmcsIHNpbWlsYXIgdG8gaW5uZXJUZXh0LiBBcHBsaWVzIHRvXG4gICAqIE1hdGhEb21Ob2RlJ3Mgb25seS5cbiAgICovXG5cblxuICB0b1RleHQoKSB7XG4gICAgLy8gVG8gYXZvaWQgdGhpcywgd2Ugd291bGQgc3ViY2xhc3MgZG9jdW1lbnRGcmFnbWVudCBzZXBhcmF0ZWx5IGZvclxuICAgIC8vIE1hdGhNTCwgYnV0IHBvbHlmaWxscyBmb3Igc3ViY2xhc3NpbmcgaXMgZXhwZW5zaXZlIHBlciBQUiAxNDY5LlxuICAgIC8vICRGbG93Rml4TWU6IE9ubHkgd29ya3MgZm9yIENoaWxkVHlwZSA9IE1hdGhEb21Ob2RlLlxuICAgIHZhciB0b1RleHQgPSBjaGlsZCA9PiBjaGlsZC50b1RleHQoKTtcblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLm1hcCh0b1RleHQpLmpvaW4oXCJcIik7XG4gIH1cblxufVxuXG4vLyBUaGlzIGZpbGUgaXMgR0VORVJBVEVEIGJ5IGJ1aWxkTWV0cmljcy5zaC4gRE8gTk9UIE1PRElGWS5cbnZhciBmb250TWV0cmljc0RhdGEgPSB7XG4gIFwiQU1TLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNjVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNjZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNjdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNjhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNjlcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNzBcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiNzFcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNzRcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI3N1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC45NDQ0NV0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI3OVwiOiBbMC4xNjY2NywgMC42ODg4OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4MVwiOiBbMC4xNjY2NywgMC42ODg4OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NlwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4N1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMS4wXSxcbiAgICBcIjg4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg5XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkwXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTY1XCI6IFswLCAwLjY3NSwgMC4wMjUsIDAsIDAuNzVdLFxuICAgIFwiMTc0XCI6IFswLjE1NTU5LCAwLjY5MjI0LCAwLCAwLCAwLjk0NjY2XSxcbiAgICBcIjI0MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIyOTVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdLFxuICAgIFwiNzEwXCI6IFswLCAwLjgyNSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3MzJcIjogWzAsIDAuOSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3NzBcIjogWzAsIDAuODI1LCAwLCAwLCAyLjMzMzM0XSxcbiAgICBcIjc3MVwiOiBbMCwgMC45LCAwLCAwLCAyLjMzMzM0XSxcbiAgICBcIjk4OVwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDA4XCI6IFswLCAwLjQzMDU2LCAwLjA0MDI4LCAwLCAwLjY2NjY3XSxcbiAgICBcIjgyNDVcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuMjc1XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdLFxuICAgIFwiODQ4N1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NDk4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg1MDJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODUwM1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4NTA0XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg1MTNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODU5MlwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk0XCI6IFstMC4wMzU5OCwgMC40NjQwMiwgMCwgMCwgMC41XSxcbiAgICBcIjg2MDJcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwM1wiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjA2XCI6IFswLjAxMzU0LCAwLjUyMjM5LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwOFwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MTBcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODYxMVwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4NjE5XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAxLjBdLFxuICAgIFwiODYyMFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MjFcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAxLjM4ODg5XSxcbiAgICBcIjg2MjJcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYyNFwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC41XSxcbiAgICBcIjg2MjVcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NjMwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAxLjBdLFxuICAgIFwiODYzMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MzRcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODYzNVwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NjM4XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2MzlcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiODY0MlwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC40MTY2N10sXG4gICAgXCI4NjQzXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2NDRcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQ2XCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0N1wiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NDhcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODY0OVwiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTBcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODY1MVwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTJcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMF0sXG4gICAgXCI4NjUzXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTRcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1NVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjY2XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY2N1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NjlcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAxLjBdLFxuICAgIFwiODY3MlwiOiBbLTAuMDY0LCAwLjQzNywgMCwgMCwgMS4zMzRdLFxuICAgIFwiODY3NFwiOiBbLTAuMDY0LCAwLjQzNywgMCwgMCwgMS4zMzRdLFxuICAgIFwiODcwNVwiOiBbMCwgMC44MjUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzA4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3MDlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcxN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC40MjkxN10sXG4gICAgXCI4NzIyXCI6IFstMC4wMzU5OCwgMC40NjQwMiwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjRcIjogWzAuMDgxOTgsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcyNlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzMzXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczN1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM4XCI6IFswLjAzNTE3LCAwLjUyMjM5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg3MzlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuMjIyMjJdLFxuICAgIFwiODc0MFwiOiBbMC4yNTE0MiwgMC43NDExMSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4NzQxXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjg3NDJcIjogWzAuMjUxNDIsIDAuNzQxMTEsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzU2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NTdcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc2NFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2NVwiOiBbLTAuMTMzMTMsIDAuMzc3ODgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2OVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3MFwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3NFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzc2XCI6IFstMC4wMTY4OCwgMC40ODMxMiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzc4XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODJcIjogWzAuMDYwNjIsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4M1wiOiBbMC4wNjA2MiwgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzg1XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODZcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4N1wiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzkwXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3OTFcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc5NlwiOiBbMC4wODE5OCwgMC45MTY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA2XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDdcIjogWzAuMjU1ODMsIDAuNzU1ODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwOFwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA5XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTJcIjogWzAuMjU1ODMsIDAuNzU1ODMsIDAsIDAsIDAuNV0sXG4gICAgXCI4ODE0XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTVcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxNlwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODE3XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MThcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxOVwiOiBbMC4yMjk1OCwgMC43Mjk1OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODIyXCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MjNcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyOFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODI5XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzBcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzMVwiOiBbMC4yMjk1OCwgMC43Mjk1OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODMyXCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzNcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQxXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDJcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0M1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQ3XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDhcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1OFwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU5XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjFcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2MlwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2M1wiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NFwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NVwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg3MlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODczXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg4NzRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiODg3NlwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODc3XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4NzhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODg3OVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4ODgyXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODNcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg4NFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODg1XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODhcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5MFwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4ODkxXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4OTJcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODkwMVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4OTAzXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDVcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwNlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTA3XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDhcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwOVwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxMFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43NjA0Ml0sXG4gICAgXCI4OTExXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjc2MDQyXSxcbiAgICBcIjg5MTJcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxM1wiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTE0XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg5MTVcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODkxNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OTE4XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTE5XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTIwXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAxLjMzMzM0XSxcbiAgICBcIjg5MjFcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDEuMzMzMzRdLFxuICAgIFwiODkyMlwiOiBbMC4zODU2OSwgMC44ODU2OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTIzXCI6IFswLjM4NTY5LCAwLjg4NTY5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjZcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyN1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTI4XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjlcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzNFwiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM1XCI6IFswLjIzMjIyLCAwLjc0MTExLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzZcIjogWzAuMjMyMjIsIDAuNzQxMTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzN1wiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM4XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzlcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk0MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTQxXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5OTRcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk5NVwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5NDE2XCI6IFswLjE1NTU5LCAwLjY5MjI0LCAwLCAwLCAwLjkwMjIyXSxcbiAgICBcIjk0ODRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI5NDg4XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTQ5MlwiOiBbMCwgMC4zNzc4OCwgMCwgMCwgMC41XSxcbiAgICBcIjk0OTZcIjogWzAsIDAuMzc3ODgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NTg1XCI6IFswLjE5NDQ0LCAwLjY4ODg5LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjk1ODZcIjogWzAuMTk0NDQsIDAuNzQxMTEsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTYzMlwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTYzM1wiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY1MFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjUxXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjk2NTRcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY2MFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjYxXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjk2NjRcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY3NFwiOiBbMC4xMTExMSwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5NzMzXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjk0NDQ1XSxcbiAgICBcIjEwMDAzXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwMDE2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwNzMxXCI6IFswLjExMTExLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEwODQ2XCI6IFswLjE5NDQ0LCAwLjc1NTgzLCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjEwODc3XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODc4XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg1XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg2XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg3XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg4XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg5XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkwXCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkxXCI6IFswLjQ4MjU2LCAwLjk4MjU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkyXCI6IFswLjQ4MjU2LCAwLjk4MjU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTAxXCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTAyXCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTMzXCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM0XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM1XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM2XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM3XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM4XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTQ5XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTUwXCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTU1XCI6IFswLjI4NDgxLCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTU2XCI6IFswLjI4NDgxLCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzUwXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjIyMjIyXSxcbiAgICBcIjU3MzUxXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjU3MzUyXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzUzXCI6IFswLCAwLjQzMDU2LCAwLjA0MDI4LCAwLCAwLjY2NjY3XSxcbiAgICBcIjU3MzU2XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU3XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU4XCI6IFswLjQxOTUxLCAwLjkxOTUxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU5XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzYwXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzYxXCI6IFswLjQxOTUxLCAwLjkxOTUxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY2XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY3XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY4XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY5XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzcwXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzcxXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XVxuICB9LFxuICBcIkNhbGlncmFwaGljLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTk0NDUsIDAuNzk4NDddLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAuMDMwNDEsIDAuMTM4ODksIDAuNjU2ODFdLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAuMDU4MzQsIDAuMTM4ODksIDAuNTI2NTNdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAuMDI3NzgsIDAuMDgzMzQsIDAuNzcxMzldLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAuMDg5NDQsIDAuMTExMTEsIDAuNTI3NzhdLFxuICAgIFwiNzBcIjogWzAsIDAuNjgzMzMsIDAuMDk5MzEsIDAuMTExMTEsIDAuNzE4NzVdLFxuICAgIFwiNzFcIjogWzAuMDk3MjIsIDAuNjgzMzMsIDAuMDU5MywgMC4xMTExMSwgMC41OTQ4N10sXG4gICAgXCI3MlwiOiBbMCwgMC42ODMzMywgMC4wMDk2NSwgMC4xMTExMSwgMC44NDQ1Ml0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODMzMywgMC4wNzM4MiwgMCwgMC41NDQ1Ml0sXG4gICAgXCI3NFwiOiBbMC4wOTcyMiwgMC42ODMzMywgMC4xODQ3MiwgMC4xNjY2NywgMC42Nzc3OF0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODMzMywgMC4wMTQ0NSwgMC4wNTU1NiwgMC43NjE5NV0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODMzMywgMCwgMC4xMzg4OSwgMC42ODk3Ml0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODMzMywgMCwgMC4xMzg4OSwgMS4yMDA5XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjE0NzM2LCAwLjA4MzM0LCAwLjgyMDQ5XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjExMTExLCAwLjc5NjExXSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjA4MjIyLCAwLjA4MzM0LCAwLjY5NTU2XSxcbiAgICBcIjgxXCI6IFswLjA5NzIyLCAwLjY4MzMzLCAwLCAwLjExMTExLCAwLjgxNjY3XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjg0NzVdLFxuICAgIFwiODNcIjogWzAsIDAuNjgzMzMsIDAuMDc1LCAwLjEzODg5LCAwLjYwNTU2XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLjI1NDE3LCAwLCAwLjU0NDY0XSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLjA5OTMxLCAwLjA4MzM0LCAwLjYyNTgzXSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjA4MjIyLCAwLCAwLjYxMjc4XSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjA4MjIyLCAwLjA4MzM0LCAwLjk4Nzc4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLjE0NjQzLCAwLjEzODg5LCAwLjcxMzNdLFxuICAgIFwiODlcIjogWzAuMDk3MjIsIDAuNjgzMzMsIDAuMDgyMjIsIDAuMDgzMzQsIDAuNjY4MzRdLFxuICAgIFwiOTBcIjogWzAsIDAuNjgzMzMsIDAuMDc5NDQsIDAuMTM4ODksIDAuNzI0NzNdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XVxuICB9LFxuICBcIkZyYWt0dXItUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yOTU3NF0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yMTQ3MV0sXG4gICAgXCIzOFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC43Mzc4Nl0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yMTIwMV0sXG4gICAgXCI0MFwiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4zODg2NV0sXG4gICAgXCI0MVwiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4zODg2NV0sXG4gICAgXCI0MlwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI0M1wiOiBbMC4wODMxOSwgMC41ODI4MywgMCwgMCwgMC43NTYyM10sXG4gICAgXCI0NFwiOiBbMCwgMC4xMDgwMywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI0NVwiOiBbMC4wODMxOSwgMC41ODI4MywgMCwgMCwgMC43NTYyM10sXG4gICAgXCI0NlwiOiBbMCwgMC4xMDgwMywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI0N1wiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI0OFwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI0OVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1MFwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1MVwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1MlwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1M1wiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1NVwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1N1wiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1OFwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC4yMTYwNl0sXG4gICAgXCI1OVwiOiBbMC4xMjYwNCwgMC40NzUzNCwgMCwgMCwgMC4yMTYwNl0sXG4gICAgXCI2MVwiOiBbLTAuMTMwOTksIDAuMzY4NjYsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNjNcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMzYyNDVdLFxuICAgIFwiNjVcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzE3Nl0sXG4gICAgXCI2NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44ODM5N10sXG4gICAgXCI2N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42MTI1NF0sXG4gICAgXCI2OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzE1OF0sXG4gICAgXCI2OVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NjI3OF0sXG4gICAgXCI3MFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC42MTExOV0sXG4gICAgXCI3MVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC43ODUzOV0sXG4gICAgXCI3MlwiOiBbMC4wNjMwMiwgMC42OTE0MSwgMCwgMCwgMC43MjAzXSxcbiAgICBcIjczXCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjU1NDQ4XSxcbiAgICBcIjc0XCI6IFswLjEyNjA0LCAwLjY5MTQxLCAwLCAwLCAwLjU1MjMxXSxcbiAgICBcIjc1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjY2ODQ1XSxcbiAgICBcIjc2XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjY2NjAyXSxcbiAgICBcIjc3XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAxLjA0OTUzXSxcbiAgICBcIjc4XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjgzMjEyXSxcbiAgICBcIjc5XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjgyNjk5XSxcbiAgICBcIjgwXCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjgyNzUzXSxcbiAgICBcIjgxXCI6IFswLjAzNzgxLCAwLjY5MTQxLCAwLCAwLCAwLjgyNjk5XSxcbiAgICBcIjgyXCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjgyODA3XSxcbiAgICBcIjgzXCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjgyODYxXSxcbiAgICBcIjg0XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjY2ODk5XSxcbiAgICBcIjg1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjY0NTc2XSxcbiAgICBcIjg2XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjgzMTMxXSxcbiAgICBcIjg3XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAxLjA0NjAyXSxcbiAgICBcIjg4XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjcxOTIyXSxcbiAgICBcIjg5XCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjgzMjkzXSxcbiAgICBcIjkwXCI6IFswLjEyNjA0LCAwLjY5MTQxLCAwLCAwLCAwLjYwMjAxXSxcbiAgICBcIjkxXCI6IFswLjI0OTgyLCAwLjc0OTQ3LCAwLCAwLCAwLjI3NzY0XSxcbiAgICBcIjkzXCI6IFswLjI0OTgyLCAwLjc0OTQ3LCAwLCAwLCAwLjI3NzY0XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjQ5OTY1XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUwMDQ2XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjUxMzE1XSxcbiAgICBcIjk5XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjM4OTQ2XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC40OTg1N10sXG4gICAgXCIxMDFcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNDAwNTNdLFxuICAgIFwiMTAyXCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjMyNjI2XSxcbiAgICBcIjEwM1wiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDM3XSxcbiAgICBcIjEwNFwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC41MjEyNl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjc4OTldLFxuICAgIFwiMTA2XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI4MDg4XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4zODk0Nl0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjc5NTNdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjc2Njc2XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MjY2Nl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNDg4ODVdLFxuICAgIFwiMTEyXCI6IFswLjE4OTA2LCAwLjUyMzk2LCAwLCAwLCAwLjUwMDQ2XSxcbiAgICBcIjExM1wiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC40ODkxMl0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuMzg5MTldLFxuICAgIFwiMTE1XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQ0MjY2XSxcbiAgICBcIjExNlwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC4zMzMwMV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTE3Ml0sXG4gICAgXCIxMThcIjogWzAsIDAuNTIzOTYsIDAsIDAsIDAuNTExOF0sXG4gICAgXCIxMTlcIjogWzAsIDAuNTIzOTYsIDAsIDAsIDAuNzczNTFdLFxuICAgIFwiMTIwXCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjM4ODY1XSxcbiAgICBcIjEyMVwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC40OTg4NF0sXG4gICAgXCIxMjJcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuMzkwNTRdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yMTQ3MV0sXG4gICAgXCI1ODExMlwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC40OTc0OV0sXG4gICAgXCI1ODExM1wiOiBbMCwgMC42MjExOSwgMCwgMCwgMC40OTgzXSxcbiAgICBcIjU4MTE0XCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjMzMzI4XSxcbiAgICBcIjU4MTE1XCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjMyOTIzXSxcbiAgICBcIjU4MTE2XCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjUwMzQzXSxcbiAgICBcIjU4MTE3XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjMzMzAxXSxcbiAgICBcIjU4MTE4XCI6IFswLCAwLjYyMTE5LCAwLCAwLCAwLjMzNDA5XSxcbiAgICBcIjU4MTE5XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUwMDczXVxuICB9LFxuICBcIk1haW4tQm9sZFwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zNV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MDI3OF0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC45NTgzM10sXG4gICAgXCIzNlwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjQzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjQ0XCI6IFswLjE5NDQ0LCAwLjE1NTU2LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjM4MzMzXSxcbiAgICBcIjQ2XCI6IFswLCAwLjE1NTU2LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUwXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUzXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNjBcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiNjFcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYyXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MzA1XSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgxODA1XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjY4XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg4MTk0XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc1NTU1XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjcyMzYxXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjkwNDE2XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjldLFxuICAgIFwiNzNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNDM2MTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNTk0NDRdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOTAxMzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjkxNjZdLFxuICAgIFwiNzdcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMDkxNjZdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOV0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44NjM4OF0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43ODYxMV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODYxMSwgMCwgMCwgMC44NjM4OF0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44NjI1XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjhdLFxuICAgIFwiODVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODg0NzJdLFxuICAgIFwiODZcIjogWzAsIDAuNjg2MTEsIDAuMDE1OTcsIDAsIDAuODY5NDRdLFxuICAgIFwiODdcIjogWzAsIDAuNjg2MTEsIDAuMDE1OTcsIDAsIDEuMTg4ODhdLFxuICAgIFwiODhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiODlcIjogWzAsIDAuNjg2MTEsIDAuMDI4NzUsIDAsIDAuODY5NDRdLFxuICAgIFwiOTBcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiOTJcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5NVwiOiBbMC4zMSwgMC4xMzQ0NCwgMC4wMzE5NCwgMCwgMC41NzVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTU5MDJdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiOTlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MjcwOF0sXG4gICAgXCIxMDJcIjogWzAsIDAuNjk0NDQsIDAuMTA5MDMsIDAsIDAuMzUxMzldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjU3NV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zNTEzOV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC45NTgzM10sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYwNjk0XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NzM2MV0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDUzNjFdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYzNDkyLCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDE1OTcsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjgzMDU1XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42MDY5NF0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDE1OTcsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjEyM1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTI0XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEyNVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjM0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg2ODUzXSxcbiAgICBcIjE2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTcyXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44Njk0NF0sXG4gICAgXCIxNzdcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiMTg0XCI6IFswLjE3MDE0LCAwLCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjE5OFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMS4wNDE2Nl0sXG4gICAgXCIyMTVcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiMjE2XCI6IFswLjA0ODYxLCAwLjczNDcyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjIyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41OTcyMl0sXG4gICAgXCIyMzBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuODMwNTVdLFxuICAgIFwiMjQ3XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjI0OFwiOiBbMC4wOTcyMiwgMC41NDE2NywgMCwgMCwgMC41NzVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjMzOFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMS4xNjk0NF0sXG4gICAgXCIzMzlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjM1MTM5XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzMTk0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNTk2MTEsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcyOVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiNzMyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC42OTE2Nl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MDU1NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjldLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODMwNTVdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQ0NDQ0LCAwLjAzMTk0LCAwLCAwLjU3NV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ0NDQ0LCAwLjAzMTk0LCAwLCAxLjE0OTk5XSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwMjc4XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjAyNzhdLFxuICAgIFwiODIyNFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjI1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjgyNDJcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuMzQ0NDRdLFxuICAgIFwiODQwN1wiOiBbMCwgMC43MjQ0NCwgMC4xNTQ4NiwgMCwgMC41NzVdLFxuICAgIFwiODQ2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Njc1OV0sXG4gICAgXCI4NDY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjg0NjdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDczNjFdLFxuICAgIFwiODQ3MlwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC43NDAyN10sXG4gICAgXCI4NDc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjg1MDFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODU5MlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODU5M1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiODU5NFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODU5NVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiODU5NlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODU5N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODU5OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NTk5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2MDBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYwMVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjM2XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjM3XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjQwXCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjQxXCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjU2XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjU3XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg2NThcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2NTlcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODY2MFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY2MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC43MDI3N10sXG4gICAgXCI4NzA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg3MDZcIjogWzAsIDAuNjk0NDQsIDAuMDYzODksIDAsIDAuNjI4NDddLFxuICAgIFwiODcwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4NzA5XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzExXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjg3MTJcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODcxNVwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4NzIyXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3MjNcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODcyNVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcyNlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcyN1wiOiBbLTAuMDI3NzgsIDAuNDcyMjIsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjhcIjogWy0wLjAyNjM5LCAwLjQ3MzYxLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzI5XCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODczMFwiOiBbMC4xOCwgMC44MiwgMCwgMCwgMC45NTgzM10sXG4gICAgXCI4NzMzXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3MzRcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODczNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM5XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjg3NDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3NDNcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODc0NFwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4NzQ1XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDZcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODc0N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4xMjc3OCwgMCwgMC41Njg3NV0sXG4gICAgXCI4NzY0XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzY4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjg3NzFcIjogWzAuMDAyMjIsIDAuNTAyMjIsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODc3M1wiOiBbMC4wMjcsIDAuNjM4LCAwLCAwLCAwLjg5NF0sXG4gICAgXCI4Nzc2XCI6IFswLjAyNDQ0LCAwLjUyNDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3ODFcIjogWzAuMDAyMjIsIDAuNTAyMjIsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgwMVwiOiBbMC4wMDIyMiwgMC41MDIyMiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODA0XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MDVcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgxMFwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4ODExXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg4MjZcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgyN1wiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODM0XCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MzVcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgzOFwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODM5XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NDZcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODg0OVwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODUwXCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTFcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODg1MlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4ODUzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTRcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1NVwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODU2XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTdcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg2NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3N10sXG4gICAgXCI4ODY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg4NjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg2OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4OTAwXCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODkwMVwiOiBbLTAuMDI2MzksIDAuNDczNjEsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiODkwMlwiOiBbLTAuMDI3NzgsIDAuNDcyMjIsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg5NjhcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODk2OVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4OTcwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjg5NzFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODk5NFwiOiBbLTAuMTM4ODksIDAuMzYxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODk5NVwiOiBbLTAuMTM4ODksIDAuMzYxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiOTY1MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wMjIyMl0sXG4gICAgXCI5NjU3XCI6IFstMC4wMjc3OCwgMC40NzIyMiwgMCwgMCwgMC41NzVdLFxuICAgIFwiOTY2MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wMjIyMl0sXG4gICAgXCI5NjY3XCI6IFstMC4wMjc3OCwgMC40NzIyMiwgMCwgMCwgMC41NzVdLFxuICAgIFwiOTcxMVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI5ODI0XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjk4MjVcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTgyNlwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5ODI3XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjk4MzdcIjogWzAsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiOTgzOFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCI5ODM5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjEwMjE2XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjEwMjE3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjEwODE1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjldLFxuICAgIFwiMTA5MjdcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiMTA5MjhcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiNTczNzZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDBdXG4gIH0sXG4gIFwiTWFpbi1Cb2xkSXRhbGljXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLjExNDE3LCAwLCAwLjM4NjExXSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLjA3OTM5LCAwLCAwLjYyMDU1XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA2ODMzLCAwLCAwLjk0NDQ0XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLjEyODYxLCAwLCAwLjk0NDQ0XSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLjA4NTI4LCAwLCAwLjg4NTU1XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLjEyOTQ1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLjE1ODA2LCAwLCAwLjQ3MzMzXSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLjAzMzA2LCAwLCAwLjQ3MzMzXSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLjE0MzMzLCAwLCAwLjU5MTExXSxcbiAgICBcIjQzXCI6IFswLjEwMzMzLCAwLjYwMzMzLCAwLjAzMzA2LCAwLCAwLjg4NTU1XSxcbiAgICBcIjQ0XCI6IFswLjE5NDQ0LCAwLjE0NzIyLCAwLCAwLCAwLjM1NTU1XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ0NDQ0LCAwLjAyNjExLCAwLCAwLjQxNDQ0XSxcbiAgICBcIjQ2XCI6IFswLCAwLjE0NzIyLCAwLCAwLCAwLjM1NTU1XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLjE1ODA2LCAwLCAwLjU5MTExXSxcbiAgICBcIjQ4XCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjQ5XCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjUwXCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjUxXCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjUyXCI6IFswLjE5NDQ0LCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjUzXCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjU1XCI6IFswLjE5NDQ0LCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjU3XCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjU4XCI6IFswLCAwLjQ0NDQ0LCAwLjA2Njk1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjU5XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA2Njk1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjYxXCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMC4wNjgzMywgMCwgMC44ODU1NV0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMC4xMTQ3MiwgMCwgMC41OTExMV0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMC4wOTIwOCwgMCwgMC44ODU1NV0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44NjU1NV0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODYxMSwgMC4wOTkyLCAwLCAwLjgxNjY2XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4NjExLCAwLjE0MjA4LCAwLCAwLjgyNjY2XSxcbiAgICBcIjY4XCI6IFswLCAwLjY4NjExLCAwLjA5MDYyLCAwLCAwLjg3NTU1XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4NjExLCAwLjExNDMxLCAwLCAwLjc1NjY2XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4NjExLCAwLjEyOTAzLCAwLCAwLjcyNzIyXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4NjExLCAwLjA3MzQ3LCAwLCAwLjg5NTI3XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4NjExLCAwLjE3MjA4LCAwLCAwLjg5NjFdLFxuICAgIFwiNzNcIjogWzAsIDAuNjg2MTEsIDAuMTU2ODEsIDAsIDAuNDcxNjZdLFxuICAgIFwiNzRcIjogWzAsIDAuNjg2MTEsIDAuMTQ1LCAwLCAwLjYxMDU1XSxcbiAgICBcIjc1XCI6IFswLCAwLjY4NjExLCAwLjE0MjA4LCAwLCAwLjg5NDk5XSxcbiAgICBcIjc2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjY5Nzc3XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4NjExLCAwLjE3MjA4LCAwLCAxLjA3Mjc3XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4NjExLCAwLjE3MjA4LCAwLCAwLjg5NjFdLFxuICAgIFwiNzlcIjogWzAsIDAuNjg2MTEsIDAuMDkwNjIsIDAsIDAuODU0OTldLFxuICAgIFwiODBcIjogWzAsIDAuNjg2MTEsIDAuMDk5MiwgMCwgMC43ODcyMV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODYxMSwgMC4wOTA2MiwgMCwgMC44NTQ5OV0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODYxMSwgMC4wMjU1OSwgMCwgMC44NTk0NF0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODYxMSwgMC4xMTI2NCwgMCwgMC42NDk5OV0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODYxMSwgMC4xMjkwMywgMCwgMC43OTYxXSxcbiAgICBcIjg1XCI6IFswLCAwLjY4NjExLCAwLjE3MjA4LCAwLCAwLjg4MDgzXSxcbiAgICBcIjg2XCI6IFswLCAwLjY4NjExLCAwLjE4NjI1LCAwLCAwLjg2NTU1XSxcbiAgICBcIjg3XCI6IFswLCAwLjY4NjExLCAwLjE4NjI1LCAwLCAxLjE1OTk5XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4NjExLCAwLjE1NjgxLCAwLCAwLjg2NTU1XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4NjExLCAwLjE5ODAzLCAwLCAwLjg2NTU1XSxcbiAgICBcIjkwXCI6IFswLCAwLjY4NjExLCAwLjE0MjA4LCAwLCAwLjcwODg4XSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLjE4NzUsIDAsIDAuMzU2MTFdLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAuMDk5NzIsIDAsIDAuMzU2MTFdLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAuMDY3MDksIDAsIDAuNTkxMTFdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTM0NDQsIDAuMDk4MTEsIDAsIDAuNTkxMTFdLFxuICAgIFwiOTdcIjogWzAsIDAuNDQ0NDQsIDAuMDk0MjYsIDAsIDAuNTkxMTFdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAuMDc4NjEsIDAsIDAuNTMyMjJdLFxuICAgIFwiOTlcIjogWzAsIDAuNDQ0NDQsIDAuMDUyMjIsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLjEwODYxLCAwLCAwLjU5MTExXSxcbiAgICBcIjEwMVwiOiBbMCwgMC40NDQ0NCwgMC4wODUsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTAyXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjIxNzc4LCAwLCAwLjRdLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjEwNSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAuMDk0MjYsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MzI2LCAwLjExMzg3LCAwLCAwLjM1NTU1XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42OTMyNiwgMC4xNjcyLCAwLCAwLjM1NTU1XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4xMTExMSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAuMTA4NjEsIDAsIDAuMjk2NjZdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjk0NDQ0XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC42NDk5OV0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDc4NjEsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA3ODYxLCAwLCAwLjU5MTExXSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDUsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQ0NDQ0LCAwLjExMTExLCAwLCAwLjUwMTY3XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NDQ0NCwgMC4wODE2NywgMCwgMC40ODY5NF0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjM0OTIsIDAuMDk2MzksIDAsIDAuMzg1XSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC42MjA1NV0sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMTExMTEsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjExMTExLCAwLCAwLjc2Nzc3XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMC4xMjU4MywgMCwgMC41NjA1NV0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA1LCAwLCAwLjU2MTY2XSxcbiAgICBcIjEyMlwiOiBbMCwgMC40NDQ0NCwgMC4xMzg4OSwgMCwgMC40OTA1NV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzQ0NDQsIDAuMTE0NzIsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42OTQ0NCwgMC4xMTQ3MywgMCwgMC41OTExMV0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTQ4ODhdLFxuICAgIFwiMTg0XCI6IFswLjE3MDE0LCAwLCAwLCAwLCAwLjUzMjIyXSxcbiAgICBcIjE5OFwiOiBbMCwgMC42ODYxMSwgMC4xMTQzMSwgMCwgMS4wMjI3N10sXG4gICAgXCIyMTZcIjogWzAuMDQ4NjEsIDAuNzM0NzIsIDAuMDkwNjIsIDAsIDAuODg1NTVdLFxuICAgIFwiMjIzXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA5NzM2LCAwLCAwLjY2NV0sXG4gICAgXCIyMzBcIjogWzAsIDAuNDQ0NDQsIDAuMDg1LCAwLCAwLjgyNjY2XSxcbiAgICBcIjI0OFwiOiBbMC4wOTcyMiwgMC41NDE2NywgMC4wOTQ1OCwgMCwgMC41OTExMV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDQ0NDQsIDAuMDk0MjYsIDAsIDAuMzU1NTVdLFxuICAgIFwiMzM4XCI6IFswLCAwLjY4NjExLCAwLjExNDMxLCAwLCAxLjE0MDU0XSxcbiAgICBcIjMzOVwiOiBbMCwgMC40NDQ0NCwgMC4wODUsIDAsIDAuODI2NjZdLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0NjExLCAwLCAwLjM4NV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAuMDY3MDksIDAsIDAuNTkxMTFdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzMTk0LCAwLjA4MjcxLCAwLCAwLjU5MTExXSxcbiAgICBcIjcxM1wiOiBbMCwgMC41OTQ0NCwgMC4xMDQ0NCwgMCwgMC41OTExMV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjk0NDQsIDAuMDg1MjgsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU5MTExXSxcbiAgICBcIjcyOFwiOiBbMCwgMC42OTQ0NCwgMC4xMDMzMywgMCwgMC41OTExMV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjk0NDQsIDAuMTI5NDUsIDAsIDAuMzU1NTVdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjk0ODg4XSxcbiAgICBcIjczMlwiOiBbMCwgMC42OTQ0NCwgMC4xMTQ3MiwgMCwgMC41OTExMV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAuMTE0NzIsIDAsIDAuNTkxMTFdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY4NjExLCAwLjEyOTAzLCAwLCAwLjY5Nzc3XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45NDQ0NF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjg2MTEsIDAuMDkwNjIsIDAsIDAuODg1NTVdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgwNjY2XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODYxMSwgMC4xNTA5MiwgMCwgMC43Njc3N10sXG4gICAgXCI5MjhcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDAuODk2MV0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjg2MTEsIDAuMTE0MzEsIDAsIDAuODI2NjZdLFxuICAgIFwiOTMzXCI6IFswLCAwLjY4NjExLCAwLjEwNzc4LCAwLCAwLjg4NTU1XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42ODYxMSwgMC4wNTYzMiwgMCwgMC44MjY2Nl0sXG4gICAgXCI5MzZcIjogWzAsIDAuNjg2MTEsIDAuMTA3NzgsIDAsIDAuODg1NTVdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY4NjExLCAwLjA5OTIsIDAsIDAuODI2NjZdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NDQ0NCwgMC4wOTgxMSwgMCwgMC41OTExMV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ0NDQ0LCAwLjA5ODExLCAwLCAxLjE4MjIxXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAuMTI5NDUsIDAsIDAuMzU1NTVdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMC4xMjk0NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLjE2NzcyLCAwLCAwLjYyMDU1XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAuMDc5MzksIDAsIDAuNjIwNTVdXG4gIH0sXG4gIFwiTWFpbi1JdGFsaWNcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAuMTI0MTcsIDAsIDAuMzA2NjddLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAuMDY5NjEsIDAsIDAuNTE0NDRdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDY2MTYsIDAsIDAuODE3NzddLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAuMTM2MzksIDAsIDAuODE3NzddLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAuMDk2OTQsIDAsIDAuNzY2NjZdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAuMTI0MTcsIDAsIDAuMzA2NjddLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAuMTYxOTQsIDAsIDAuNDA4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAuMDM2OTQsIDAsIDAuNDA4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAuMTQ5MTcsIDAsIDAuNTExMTFdLFxuICAgIFwiNDNcIjogWzAuMDU2NjcsIDAuNTYxNjcsIDAuMDM2OTQsIDAsIDAuNzY2NjZdLFxuICAgIFwiNDRcIjogWzAuMTk0NDQsIDAuMTA1NTYsIDAsIDAsIDAuMzA2NjddLFxuICAgIFwiNDVcIjogWzAsIDAuNDMwNTYsIDAuMDI4MjYsIDAsIDAuMzU3NzhdLFxuICAgIFwiNDZcIjogWzAsIDAuMTA1NTYsIDAsIDAsIDAuMzA2NjddLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAuMTYxOTQsIDAsIDAuNTExMTFdLFxuICAgIFwiNDhcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTBcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTFcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTJcIjogWzAuMTk0NDQsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTNcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTVcIjogWzAuMTk0NDQsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTZcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTdcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAuMDU4MiwgMCwgMC4zMDY2N10sXG4gICAgXCI1OVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wNTgyLCAwLCAwLjMwNjY3XSxcbiAgICBcIjYxXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMC4wNjYxNiwgMCwgMC43NjY2Nl0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMC4xMjI1LCAwLCAwLjUxMTExXSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLjA5NTk3LCAwLCAwLjc2NjY2XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc0MzMzXSxcbiAgICBcIjY2XCI6IFswLCAwLjY4MzMzLCAwLjEwMjU3LCAwLCAwLjcwMzg5XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4MzMzLCAwLjE0NTI4LCAwLCAwLjcxNTU1XSxcbiAgICBcIjY4XCI6IFswLCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc1NV0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC42NzgzM10sXG4gICAgXCI3MFwiOiBbMCwgMC42ODMzMywgMC4xMzMwNSwgMCwgMC42NTI3N10sXG4gICAgXCI3MVwiOiBbMCwgMC42ODMzMywgMC4wODcyMiwgMCwgMC43NzM2MV0sXG4gICAgXCI3MlwiOiBbMCwgMC42ODMzMywgMC4xNjM4OSwgMCwgMC43NDMzM10sXG4gICAgXCI3M1wiOiBbMCwgMC42ODMzMywgMC4xNTgwNiwgMCwgMC4zODU1NV0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODMzMywgMC4xNDAyOCwgMCwgMC41MjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjgzMzMsIDAuMTQ1MjgsIDAsIDAuNzY4ODhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI3MjJdLFxuICAgIFwiNzdcIjogWzAsIDAuNjgzMzMsIDAuMTYzODksIDAsIDAuODk2NjZdLFxuICAgIFwiNzhcIjogWzAsIDAuNjgzMzMsIDAuMTYzODksIDAsIDAuNzQzMzNdLFxuICAgIFwiNzlcIjogWzAsIDAuNjgzMzMsIDAuMDk0MDMsIDAsIDAuNzY2NjZdLFxuICAgIFwiODBcIjogWzAsIDAuNjgzMzMsIDAuMTAyNTcsIDAsIDAuNjc4MzNdLFxuICAgIFwiODFcIjogWzAuMTk0NDQsIDAuNjgzMzMsIDAuMDk0MDMsIDAsIDAuNzY2NjZdLFxuICAgIFwiODJcIjogWzAsIDAuNjgzMzMsIDAuMDM4NjgsIDAsIDAuNzI5NDRdLFxuICAgIFwiODNcIjogWzAsIDAuNjgzMzMsIDAuMTE5NzIsIDAsIDAuNTYyMjJdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMTMzMDUsIDAsIDAuNzE1NTVdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMTYzODksIDAsIDAuNzQzMzNdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMTgzNjEsIDAsIDAuNzQzMzNdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMTgzNjEsIDAsIDAuOTk4ODhdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMTU4MDYsIDAsIDAuNzQzMzNdLFxuICAgIFwiODlcIjogWzAsIDAuNjgzMzMsIDAuMTkzODMsIDAsIDAuNzQzMzNdLFxuICAgIFwiOTBcIjogWzAsIDAuNjgzMzMsIDAuMTQ1MjgsIDAsIDAuNjEzMzNdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAuMTg3NSwgMCwgMC4zMDY2N10sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMC4xMDUyOCwgMCwgMC4zMDY2N10sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMC4wNjY0NiwgMCwgMC41MTExMV0sXG4gICAgXCI5NVwiOiBbMC4zMSwgMC4xMjA1NiwgMC4wOTIwOCwgMCwgMC41MTExMV0sXG4gICAgXCI5N1wiOiBbMCwgMC40MzA1NiwgMC4wNzY3MSwgMCwgMC41MTExMV0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMC4wNjMxMiwgMCwgMC40Nl0sXG4gICAgXCI5OVwiOiBbMCwgMC40MzA1NiwgMC4wNTY1MywgMCwgMC40Nl0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAuMTAzMzMsIDAsIDAuNTExMTFdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQzMDU2LCAwLjA3NTE0LCAwLCAwLjQ2XSxcbiAgICBcIjEwMlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4yMTE5NCwgMCwgMC4zMDY2N10sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDg4NDcsIDAsIDAuNDZdLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLjA3NjcxLCAwLCAwLjUxMTExXSxcbiAgICBcIjEwNVwiOiBbMCwgMC42NTUzNiwgMC4xMDE5LCAwLCAwLjMwNjY3XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NTUzNiwgMC4xNDQ2NywgMCwgMC4zMDY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMTA3NjQsIDAsIDAuNDZdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjEwMzMzLCAwLCAwLjI1NTU1XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40MzA1NiwgMC4wNzY3MSwgMCwgMC44MTc3N10sXG4gICAgXCIxMTBcIjogWzAsIDAuNDMwNTYsIDAuMDc2NzEsIDAsIDAuNTYyMjJdLFxuICAgIFwiMTExXCI6IFswLCAwLjQzMDU2LCAwLjA2MzEyLCAwLCAwLjUxMTExXSxcbiAgICBcIjExMlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wNjMxMiwgMCwgMC41MTExMV0sXG4gICAgXCIxMTNcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDg4NDcsIDAsIDAuNDZdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQzMDU2LCAwLjEwNzY0LCAwLCAwLjQyMTY2XSxcbiAgICBcIjExNVwiOiBbMCwgMC40MzA1NiwgMC4wODIwOCwgMCwgMC40MDg4OV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjE1MDgsIDAuMDk0ODYsIDAsIDAuMzMyMjJdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQzMDU2LCAwLjA3NjcxLCAwLCAwLjUzNjY2XSxcbiAgICBcIjExOFwiOiBbMCwgMC40MzA1NiwgMC4xMDc2NCwgMCwgMC40Nl0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDMwNTYsIDAuMTA3NjQsIDAsIDAuNjY0NDRdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQzMDU2LCAwLjEyMDQyLCAwLCAwLjQ2Mzg5XSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wODg0NywgMCwgMC40ODU1NV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDMwNTYsIDAuMTIyOTIsIDAsIDAuNDA4ODldLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjMxNzg2LCAwLjExNTg1LCAwLCAwLjUxMTExXSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjY3ODYsIDAuMTA0NzQsIDAsIDAuNTExMTFdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMTI5XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC40Nl0sXG4gICAgXCIxOThcIjogWzAsIDAuNjgzMzMsIDAuMTIwMjgsIDAsIDAuODgyNzddLFxuICAgIFwiMjE2XCI6IFswLjA0ODYxLCAwLjczMTk0LCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjIyM1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4xMDUxNCwgMCwgMC41MzY2Nl0sXG4gICAgXCIyMzBcIjogWzAsIDAuNDMwNTYsIDAuMDc1MTQsIDAsIDAuNzE1NTVdLFxuICAgIFwiMjQ4XCI6IFswLjA5NzIyLCAwLjUyNzc4LCAwLjA5MTk0LCAwLCAwLjUxMTExXSxcbiAgICBcIjMzOFwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC45ODQ5OV0sXG4gICAgXCIzMzlcIjogWzAsIDAuNDMwNTYsIDAuMDc1MTQsIDAsIDAuNzE1NTVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjY5NDQ0LCAwLjA2NjQ2LCAwLCAwLjUxMTExXSxcbiAgICBcIjcxMVwiOiBbMCwgMC42Mjg0NywgMC4wODI5NSwgMCwgMC41MTExMV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNTYxNjcsIDAuMTAzMzMsIDAsIDAuNTExMTFdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLjA5Njk0LCAwLCAwLjUxMTExXSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAuMTA4MDYsIDAsIDAuNTExMTFdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY2Nzg2LCAwLjExNzUyLCAwLCAwLjMwNjY3XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzEyOV0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjY3ODYsIDAuMTE1ODUsIDAsIDAuNTExMTFdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLjEyMjUsIDAsIDAuNTExMTFdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY4MzMzLCAwLjEzMzA1LCAwLCAwLjYyNzIyXSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC44MTc3N10sXG4gICAgXCI5MjBcIjogWzAsIDAuNjgzMzMsIDAuMDk0MDMsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY5MjIyXSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODMzMywgMC4xNTI5NCwgMCwgMC42NjQ0NF0sXG4gICAgXCI5MjhcIjogWzAsIDAuNjgzMzMsIDAuMTYzODksIDAsIDAuNzQzMzNdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4MzMzLCAwLjEyMDI4LCAwLCAwLjcxNTU1XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODMzMywgMC4xMTExMSwgMCwgMC43NjY2Nl0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjgzMzMsIDAuMDU5ODYsIDAsIDAuNzE1NTVdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4MzMzLCAwLjExMTExLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODMzMywgMC4xMDI1NywgMCwgMC43MTU1NV0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQzMDU2LCAwLjA5MjA4LCAwLCAwLjUxMTExXSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDMwNTYsIDAuMDkyMDgsIDAsIDEuMDIyMjJdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLjEyNDE3LCAwLCAwLjMwNjY3XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAuMTY4NSwgMCwgMC41MTQ0NF0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLjA2OTYxLCAwLCAwLjUxNDQ0XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdXG4gIH0sXG4gIFwiTWFpbi1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiMzZcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQzXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjQ0XCI6IFswLjE5NDQ0LCAwLjEwNTU2LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjMzMzMzXSxcbiAgICBcIjQ2XCI6IFswLCAwLjEwNTU2LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjUwXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1MlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjUzXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NVwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1OFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI1OVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI2MFwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjFcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYyXCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NV0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43MDgzNF0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NjM4OV0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42ODA1Nl0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42NTI3OF0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43ODQ3Ml0sXG4gICAgXCI3MlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC4zNjExMV0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC41MTM4OV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42MjVdLFxuICAgIFwiNzdcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuOTE2NjddLFxuICAgIFwiNzhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzlcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiODFcIjogWzAuMTk0NDQsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODJcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiODNcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMDEzODksIDAsIDAuNzVdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMDEzODksIDAsIDEuMDI3NzhdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiODlcIjogWzAsIDAuNjgzMzMsIDAuMDI1LCAwLCAwLjc1XSxcbiAgICBcIjkwXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjkyXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5NVwiOiBbMC4zMSwgMC4xMjA1NiwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjk3XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIxMDJcIjogWzAsIDAuNjk0NDQsIDAuMDc3NzgsIDAsIDAuMzA1NTZdLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAxMzg5LCAwLCAwLjVdLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjEwNVwiOiBbMCwgMC42Njc4NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjY3ODYsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjExMlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMTNcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjM5MTY3XSxcbiAgICBcIjExNVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zOTQ0NV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjE1MDgsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiMTE3XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjExOFwiOiBbMCwgMC40MzA1NiwgMC4wMTM4OSwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNzIyMjJdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMTM4OSwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTIzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiMTI0XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjEyNVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zMTc4NiwgMCwgMCwgMC41XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIxNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzY5MDldLFxuICAgIFwiMTY3XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42Njc4NiwgMCwgMCwgMC41XSxcbiAgICBcIjE3MlwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzVdLFxuICAgIFwiMTc3XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjE4MlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTk4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjkwMjc4XSxcbiAgICBcIjIxNVwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIyMTZcIjogWzAuMDQ4NjEsIDAuNzMxOTQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMjIzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjI0N1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTI3NzgsIDAsIDAsIDAuNV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMzM4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAxLjAxMzg5XSxcbiAgICBcIjMzOVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NjdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNzEwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYyODQ3LCAwLCAwLCAwLjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2Nzc4LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY2Nzg2LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NV0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI1XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY5NDQ1XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MjhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQzMDU2LCAwLjAyNzc4LCAwLCAwLjVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMCwgMS4wXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjgyMjRcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODIyNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4MjMwXCI6IFswLCAwLjEyMywgMCwgMCwgMS4xNzJdLFxuICAgIFwiODI0MlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC4yNzVdLFxuICAgIFwiODQwN1wiOiBbMCwgMC43MTQ0NCwgMC4xNTM4MiwgMCwgMC41XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdLFxuICAgIFwiODQ2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NDY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLjExMTExLCAwLjQxNjY3XSxcbiAgICBcIjg0NzJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMTExMTEsIDAuNjM2NDZdLFxuICAgIFwiODQ3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NTAxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg1OTJcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODU5M1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjg1OTRcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODU5NVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjg1OTZcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODU5N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjg1OThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMF0sXG4gICAgXCI4NTk5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwMFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MDFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjE0XCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjE3XCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuMTI2XSxcbiAgICBcIjg2MThcIjogWzAuMDExLCAwLjUxMSwgMCwgMCwgMS4xMjZdLFxuICAgIFwiODYzNlwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjM3XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NDBcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0MVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjUyXCI6IFswLjAxMSwgMC42NzEsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjU2XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTdcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODY1OFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjU5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg2NjBcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY2MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NzA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3MDZcIjogWzAsIDAuNjk0NDQsIDAuMDU1NTYsIDAuMDgzMzQsIDAuNTMwOV0sXG4gICAgXCI4NzA3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3MDlcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzExXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg3MTJcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3MTVcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3MjJcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcyM1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzI1XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcyNlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjdcIjogWy0wLjAzNDcyLCAwLjQ2NTI4LCAwLCAwLCAwLjVdLFxuICAgIFwiODcyOFwiOiBbLTAuMDU1NTUsIDAuNDQ0NDUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI5XCI6IFstMC4wNTU1NSwgMC40NDQ0NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MzBcIjogWzAuMiwgMC44LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg3MzNcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODczNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczOVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4NzQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODc0M1wiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzQ0XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NDVcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc0NlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzQ3XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjExMTExLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg3NjRcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NjhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODc3MVwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3M1wiOiBbLTAuMDIyLCAwLjU4OSwgMCwgMCwgMC43NzhdLFxuICAgIFwiODc3NlwiOiBbLTAuMDE2ODgsIDAuNDgzMTIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4MVwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4NFwiOiBbLTAuMTMzLCAwLjY3MywgMCwgMCwgMC43NzhdLFxuICAgIFwiODgwMVwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwNFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA1XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTBcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAxLjBdLFxuICAgIFwiODgxMVwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDEuMF0sXG4gICAgXCI4ODI2XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODI3XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODM0XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODM1XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODM4XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzlcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0NlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4ODQ5XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTBcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1MVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4ODUyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg4NTNcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1NFwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU1XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTZcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1N1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4NjdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODg2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NzJcIjogWzAuMjQ5LCAwLjc1LCAwLCAwLCAwLjg2N10sXG4gICAgXCI4OTAwXCI6IFstMC4wNTU1NSwgMC40NDQ0NSwgMCwgMCwgMC41XSxcbiAgICBcIjg5MDFcIjogWy0wLjA1NTU1LCAwLjQ0NDQ1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjg5MDJcIjogWy0wLjAzNDcyLCAwLjQ2NTI4LCAwLCAwLCAwLjVdLFxuICAgIFwiODkwNFwiOiBbMC4wMDUsIDAuNTA1LCAwLCAwLCAwLjldLFxuICAgIFwiODk0MlwiOiBbMC4wMywgMC45MDMsIDAsIDAsIDAuMjc4XSxcbiAgICBcIjg5NDNcIjogWy0wLjE5LCAwLjMxMywgMCwgMCwgMS4xNzJdLFxuICAgIFwiODk0NVwiOiBbLTAuMSwgMC44MjMsIDAsIDAsIDEuMjgyXSxcbiAgICBcIjg5NjhcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODk2OVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4OTcwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5NzFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODk5NFwiOiBbLTAuMTQyMzYsIDAuMzU3NjQsIDAsIDAsIDEuMF0sXG4gICAgXCI4OTk1XCI6IFstMC4xNDIzNiwgMC4zNTc2NCwgMCwgMCwgMS4wXSxcbiAgICBcIjkxMzZcIjogWzAuMjQ0LCAwLjc0NCwgMCwgMCwgMC40MTJdLFxuICAgIFwiOTEzN1wiOiBbMC4yNDQsIDAuNzQ1LCAwLCAwLCAwLjQxMl0sXG4gICAgXCI5NjUxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjk2NTdcIjogWy0wLjAzNDcyLCAwLjQ2NTI4LCAwLCAwLCAwLjVdLFxuICAgIFwiOTY2MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5NjY3XCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjk3MTFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMF0sXG4gICAgXCI5ODI0XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk4MjVcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTgyNlwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODI3XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk4MzdcIjogWzAsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiOTgzOFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI5ODM5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjEwMjE2XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjEwMjE3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjEwMjIyXCI6IFswLjI0NCwgMC43NDQsIDAsIDAsIDAuNDEyXSxcbiAgICBcIjEwMjIzXCI6IFswLjI0NCwgMC43NDUsIDAsIDAsIDAuNDEyXSxcbiAgICBcIjEwMjI5XCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuNjA5XSxcbiAgICBcIjEwMjMwXCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuNjM4XSxcbiAgICBcIjEwMjMxXCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuODU5XSxcbiAgICBcIjEwMjMyXCI6IFswLjAyNCwgMC41MjUsIDAsIDAsIDEuNjA5XSxcbiAgICBcIjEwMjMzXCI6IFswLjAyNCwgMC41MjUsIDAsIDAsIDEuNjM4XSxcbiAgICBcIjEwMjM0XCI6IFswLjAyNCwgMC41MjUsIDAsIDAsIDEuODU4XSxcbiAgICBcIjEwMjM2XCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuNjM4XSxcbiAgICBcIjEwODE1XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjEwOTI3XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTI4XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3Mzc2XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwXVxuICB9LFxuICBcIk1hdGgtQm9sZEl0YWxpY1wiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI0OFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNDlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1MVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTVcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNjVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiNjZcIjogWzAsIDAuNjg2MTEsIDAuMDQ4MzUsIDAsIDAuODY2NF0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC44MTY5NF0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC45MzgxMl0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODYxMSwgMC4wNTQ1MSwgMCwgMC44MTAwN10sXG4gICAgXCI3MFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42ODg4OV0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44ODY3M10sXG4gICAgXCI3MlwiOiBbMCwgMC42ODYxMSwgMC4wODIyOSwgMCwgMC45ODIyOV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODYxMSwgMC4wNzc3OCwgMCwgMC41MTExMV0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODYxMSwgMC4xMDA2OSwgMCwgMC42MzEyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC45NzExOF0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43NTU1NV0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMS4xNDIwMV0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMC45NTAzNF0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC44MzY2Nl0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC43MjMwOV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODYxMSwgMCwgMCwgMC44Njg2MV0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODYxMSwgMC4wMDQyMSwgMCwgMC44NzIzNV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODYxMSwgMC4wNTM4MiwgMCwgMC42OTI3MV0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42MzY2M10sXG4gICAgXCI4NVwiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMC44MDAyN10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODYxMSwgMC4yNTU1NSwgMCwgMC42Nzc3OF0sXG4gICAgXCI4N1wiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMS4wOTMwNV0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODYxMSwgMC4wNzc3OCwgMCwgMC45NDcyMl0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODYxMSwgMC4yNTU1NSwgMCwgMC42NzQ1OF0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC43NzI1N10sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42MzI4N10sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MjA4M10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTM0Ml0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjA5NzJdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU1MzYxXSxcbiAgICBcIjEwMlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4xMTA0MiwgMCwgMC41NjgwNl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNTQ0OV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MzI2LCAwLCAwLCAwLjQwNDhdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY5MzI2LCAwLjA2MjIsIDAsIDAuNDcwODNdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLjAxODUyLCAwLCAwLjYwMzddLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjAwODgsIDAsIDAuMzQ4MTVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAxLjAzMjRdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjcxMjk2XSxcbiAgICBcIjExMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjAwOTJdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjU0MjEzXSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC41Mjg3XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MzEyNV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjM0OTIsIDAsIDAsIDAuNDE1MjhdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjY4MTAyXSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41NjY2Nl0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMDI3NzgsIDAsIDAuODMxNDhdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjY1OTAzXSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41OTAyOF0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMDQyMTMsIDAsIDAuNTU1MDldLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42NTY5NF0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4NjExLCAwLjAzMTk0LCAwLCAwLjg2NzIyXSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MDU1NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjg2MTEsIDAuMDc0NTgsIDAsIDAuODQxMjVdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4NjExLCAwLjA4MjI5LCAwLCAwLjk4MjI5XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODYxMSwgMC4wNTQ1MSwgMCwgMC44ODUwN10sXG4gICAgXCI5MzNcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDAuNjcwODNdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODYxMSwgMC4xMTY1MywgMCwgMC43MTQwMl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjg2MTEsIDAuMDQ4MzUsIDAsIDAuODc4OV0sXG4gICAgXCI5NDVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNzYwNjRdLFxuICAgIFwiOTQ2XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjAzNDAzLCAwLCAwLjY1OTcyXSxcbiAgICBcIjk0N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wNjM4OSwgMCwgMC41OTAwM10sXG4gICAgXCI5NDhcIjogWzAsIDAuNjk0NDQsIDAuMDM4MTksIDAsIDAuNTIyMjJdLFxuICAgIFwiOTQ5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjUyODgyXSxcbiAgICBcIjk1MFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNjIxNSwgMCwgMC41MDgzM10sXG4gICAgXCI5NTFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNl0sXG4gICAgXCI5NTJcIjogWzAsIDAuNjk0NDQsIDAuMDMxOTQsIDAsIDAuNTYxOF0sXG4gICAgXCI5NTNcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDEyMDRdLFxuICAgIFwiOTU0XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjY2NzU5XSxcbiAgICBcIjk1NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NzA4M10sXG4gICAgXCI5NTZcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzA3ODddLFxuICAgIFwiOTU3XCI6IFswLCAwLjQ0NDQ0LCAwLjA2ODk4LCAwLCAwLjU3Njg1XSxcbiAgICBcIjk1OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wMzAyMSwgMCwgMC41MDgzM10sXG4gICAgXCI5NTlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTg0NzJdLFxuICAgIFwiOTYwXCI6IFswLCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjY4MjQxXSxcbiAgICBcIjk2MVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC42MTE4XSxcbiAgICBcIjk2MlwiOiBbMC4wOTcyMiwgMC40NDQ0NCwgMC4wNzkxNywgMCwgMC40MjM2MV0sXG4gICAgXCI5NjNcIjogWzAsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNjg1ODhdLFxuICAgIFwiOTY0XCI6IFswLCAwLjQ0NDQ0LCAwLjEzNDcyLCAwLCAwLjUyMDgzXSxcbiAgICBcIjk2NVwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC42MzA1NV0sXG4gICAgXCI5NjZcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzQ3MjJdLFxuICAgIFwiOTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjcxODA1XSxcbiAgICBcIjk2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wMzcwNCwgMCwgMC43NTgzM10sXG4gICAgXCI5NjlcIjogWzAsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNzE3ODJdLFxuICAgIFwiOTc3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY5MTU1XSxcbiAgICBcIjk4MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC43MTI1XSxcbiAgICBcIjk4MlwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC45NzVdLFxuICAgIFwiMTAwOVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC42MTE4XSxcbiAgICBcIjEwMTNcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDgzMzNdLFxuICAgIFwiNTc2NDlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMzkzNTJdLFxuICAgIFwiNTc5MTFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNDM4ODldXG4gIH0sXG4gIFwiTWF0aC1JdGFsaWNcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI0OVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMC4xMzg4OSwgMC43NV0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4wNTAxNywgMC4wODMzNCwgMC43NTg1MV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4wNzE1MywgMC4wODMzNCwgMC43MTQ3Ml0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wNTU1NiwgMC44Mjc5Ml0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43MzgyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MzA2XSxcbiAgICBcIjcxXCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc4NjI1XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjA3ODQ3LCAwLjExMTExLCAwLjQzOTU4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4MzMzLCAwLjA5NjE4LCAwLjE2NjY3LCAwLjU1NDUxXSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjA3MTUzLCAwLjA1NTU2LCAwLjg0OTMxXSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjAyNzc4LCAwLjY4MDU2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjk3MDE0XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjgwMzQ3XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MjAxXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc5MDU2XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLjAwNzczLCAwLjA4MzM0LCAwLjc1OTI5XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjA1NzY0LCAwLjA4MzM0LCAwLjYxMzJdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDgzMzQsIDAuNTg0MzhdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMTA5MDMsIDAuMDI3NzgsIDAuNjgyNzhdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgzMzNdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAsIDAuOTQ0NDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMDc4NDcsIDAuMDgzMzQsIDAuODI4NDddLFxuICAgIFwiODlcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgwNTZdLFxuICAgIFwiOTBcIjogWzAsIDAuNjgzMzMsIDAuMDcxNTMsIDAuMDgzMzQsIDAuNjgyNjRdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI4NTldLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDI5MTddLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDMyNzZdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLjE2NjY3LCAwLjUyMDQ5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40NjU2M10sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTA3NjQsIDAuMTY2NjcsIDAuNDg5NTldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjQ3Njk3XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzYxNl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjU5NTIsIDAsIDAsIDAuMzQ0NTFdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY1OTUyLCAwLjA1NzI0LCAwLCAwLjQxMTgxXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wMzE0OCwgMCwgMC41MjA2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4wMTk2OCwgMC4wODMzNCwgMC4yOTgzOF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuODc4MDFdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjYwMDIzXSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTAzMTNdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA4MzM0LCAwLjQ0NjQxXSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMC4wNTU1NiwgMC40NTExNl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDY4NzVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLjA4MzM0LCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzI0Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNDg0NzJdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAyNjkxLCAwLjA4MzM0LCAwLjcxNTkyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzE1M10sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDkwMjhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLjA0Mzk4LCAwLjA1NTU2LCAwLjQ2NTA1XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDgzMzQsIDAuNjE1MjhdLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjE2NjY3LCAwLjgzMzM0XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wODMzNCwgMC43NjI3OF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTY2NjcsIDAuNjk0NDVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4MzMzLCAwLjA3NTY5LCAwLjA4MzM0LCAwLjc0MjM2XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODMzMywgMC4wODEyNSwgMC4wNTU1NiwgMC44MzEyNV0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjgzMzMsIDAuMDU3NjQsIDAuMDgzMzQsIDAuNzc5ODZdLFxuICAgIFwiOTMzXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA1NTU2LCAwLjU4MzMzXSxcbiAgICBcIjkzNFwiOiBbMCwgMC42ODMzMywgMCwgMC4wODMzNCwgMC42NjY2N10sXG4gICAgXCI5MzZcIjogWzAsIDAuNjgzMzMsIDAuMTEsIDAuMDU1NTYsIDAuNjEyMjJdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY4MzMzLCAwLjA1MDE3LCAwLjA4MzM0LCAwLjc3MjRdLFxuICAgIFwiOTQ1XCI6IFswLCAwLjQzMDU2LCAwLjAwMzcsIDAuMDI3NzgsIDAuNjM5N10sXG4gICAgXCI5NDZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDUyNzgsIDAuMDgzMzQsIDAuNTY1NjNdLFxuICAgIFwiOTQ3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA1NTU2LCAwLCAwLjUxNzczXSxcbiAgICBcIjk0OFwiOiBbMCwgMC42OTQ0NCwgMC4wMzc4NSwgMC4wNTU1NiwgMC40NDQ0NF0sXG4gICAgXCI5NDlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNDY2MzJdLFxuICAgIFwiOTUwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA3Mzc4LCAwLjA4MzM0LCAwLjQzNzVdLFxuICAgIFwiOTUxXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA1NTU2LCAwLjQ5NjUzXSxcbiAgICBcIjk1MlwiOiBbMCwgMC42OTQ0NCwgMC4wMjc3OCwgMC4wODMzNCwgMC40Njk0NF0sXG4gICAgXCI5NTNcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuMzUzOTRdLFxuICAgIFwiOTU0XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjU3NjE2XSxcbiAgICBcIjk1NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI5NTZcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDI3NzgsIDAuNjAyNTVdLFxuICAgIFwiOTU3XCI6IFswLCAwLjQzMDU2LCAwLjA2MzY2LCAwLjAyNzc4LCAwLjQ5Mzk4XSxcbiAgICBcIjk1OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNDYwMSwgMC4xMTExMSwgMC40Mzc1XSxcbiAgICBcIjk1OVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40ODQ3Ml0sXG4gICAgXCI5NjBcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAsIDAuNTcwMDNdLFxuICAgIFwiOTYxXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjUxNzAyXSxcbiAgICBcIjk2MlwiOiBbMC4wOTcyMiwgMC40MzA1NiwgMC4wNzk4NiwgMC4wODMzNCwgMC4zNjI4NV0sXG4gICAgXCI5NjNcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAsIDAuNTcxNDFdLFxuICAgIFwiOTY0XCI6IFswLCAwLjQzMDU2LCAwLjExMzIsIDAuMDI3NzgsIDAuNDM3MTVdLFxuICAgIFwiOTY1XCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjU0MDI4XSxcbiAgICBcIjk2NlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC42NTQxN10sXG4gICAgXCI5NjdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNjI1NjldLFxuICAgIFwiOTY4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjAzNTg4LCAwLjExMTExLCAwLjY1MTM5XSxcbiAgICBcIjk2OVwiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC42MjI0NV0sXG4gICAgXCI5NzdcIjogWzAsIDAuNjk0NDQsIDAsIDAuMDgzMzQsIDAuNTkxNDRdLFxuICAgIFwiOTgxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLjA4MzM0LCAwLjU5NTgzXSxcbiAgICBcIjk4MlwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMCwgMC44MjgxM10sXG4gICAgXCIxMDA5XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjUxNzAyXSxcbiAgICBcIjEwMTNcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDA1OV0sXG4gICAgXCI1NzY0OVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC4zMjI0Nl0sXG4gICAgXCI1NzkxMVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC4zODQwM11cbiAgfSxcbiAgXCJTYW5zU2VyaWYtQm9sZFwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zNjY2N10sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTgzNF0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC45MTY2N10sXG4gICAgXCIzNlwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NV0sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMS4wMjkxMl0sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1Nl0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40Mjc3OF0sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40Mjc3OF0sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMCwgMCwgMC41NV0sXG4gICAgXCI0M1wiOiBbMC4xMTY2NywgMC42MTY2NywgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI0NFwiOiBbMC4xMDU1NiwgMC4xMzA1NiwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI0NVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC4zNjY2N10sXG4gICAgXCI0NlwiOiBbMCwgMC4xMzA1NiwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NV0sXG4gICAgXCI0OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI0OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1MVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1MlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1OFwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI1OVwiOiBbMC4xMDU1NiwgMC40NTgzMywgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI2MVwiOiBbLTAuMDkzNzUsIDAuNDA2MjUsIDAsIDAsIDAuODU1NTZdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTE5NDVdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiNjVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiNjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiNjdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzhdLFxuICAgIFwiNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiNjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjQxNjddLFxuICAgIFwiNzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiNzFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiNzJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzMwNTZdLFxuICAgIFwiNzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTE5NDVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzYzODldLFxuICAgIFwiNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTgwNTZdLFxuICAgIFwiNzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTc3NzhdLFxuICAgIFwiNzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiNzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiODBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzhdLFxuICAgIFwiODFcIjogWzAuMTA1NTYsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiODJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzhdLFxuICAgIFwiODNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiODVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzYzODldLFxuICAgIFwiODZcIjogWzAsIDAuNjk0NDQsIDAuMDE1MjgsIDAsIDAuNzMzMzRdLFxuICAgIFwiODdcIjogWzAsIDAuNjk0NDQsIDAuMDE1MjgsIDAsIDEuMDM4ODldLFxuICAgIFwiODhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiODlcIjogWzAsIDAuNjk0NDQsIDAuMDI3NSwgMCwgMC43MzMzNF0sXG4gICAgXCI5MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NzIyM10sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zNDMwNl0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zNDMwNl0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI5NVwiOiBbMC4zNSwgMC4xMDgzMywgMC4wMzA1NiwgMCwgMC41NV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41MjVdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiOTlcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNDg4ODldLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjEwMVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41MTExMV0sXG4gICAgXCIxMDJcIjogWzAsIDAuNjk0NDQsIDAuMDc2MzksIDAsIDAuMzM2MTFdLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQ1ODMzLCAwLjAxNTI4LCAwLCAwLjU1XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjU1NTZdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjI4NjExXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MzA1Nl0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjU1NTZdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjg2NjY3XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNTVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ1ODMzLCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40NTgzMywgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuMzcyMjJdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjQyMTY3XSxcbiAgICBcIjExNlwiOiBbMCwgMC41ODkyOSwgMCwgMCwgMC40MDQxN10sXG4gICAgXCIxMTdcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQ1ODMzLCAwLjAxNTI4LCAwLCAwLjVdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ1ODMzLCAwLjAxNTI4LCAwLCAwLjc0NDQ1XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41XSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC41XSxcbiAgICBcIjEyMlwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC40NzYzOV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzQ0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiMTgwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC40ODg4OV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuMjU1NTZdLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ1ODMzLCAwLCAwLCAwLjI4NjExXSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjM1NDIsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjYzNzc4LCAwLCAwLCAwLjU1XSxcbiAgICBcIjcyOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjczMlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU4MDU2XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC45MTY2N10sXG4gICAgXCI5MjBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODU1NTZdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY3MjIzXSxcbiAgICBcIjkyNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI5MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQ1ODMzLCAwLjAzMDU2LCAwLCAwLjU1XSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDU4MzMsIDAuMDMwNTYsIDAsIDEuMTAwMDFdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU4MzRdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTgzNF1cbiAgfSxcbiAgXCJTYW5zU2VyaWYtSXRhbGljXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLjA1NzMzLCAwLCAwLjMxOTQ1XSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLjAwMzE2LCAwLCAwLjVdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDUwODcsIDAsIDAuODMzMzRdLFxuICAgIFwiMzZcIjogWzAuMDU1NTYsIDAuNzUsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMC4wMzEyNiwgMCwgMC44MzMzNF0sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMC4wMzA1OCwgMCwgMC43NTgzNF0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMC4wNzgxNiwgMCwgMC4yNzc3OF0sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMC4xMzE2NCwgMCwgMC4zODg4OV0sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMC4wMjUzNiwgMCwgMC4zODg4OV0sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMC4xMTc3NSwgMCwgMC41XSxcbiAgICBcIjQzXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLjAyNTM2LCAwLCAwLjc3Nzc4XSxcbiAgICBcIjQ0XCI6IFswLjEyNSwgMC4wODMzMywgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0NVwiOiBbMCwgMC40NDQ0NCwgMC4wMTk0NiwgMCwgMC4zMzMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4wODMzMywgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMC4xMzE2NCwgMCwgMC41XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAuMDI1MDIsIDAsIDAuMjc3NzhdLFxuICAgIFwiNTlcIjogWzAuMTI1LCAwLjQ0NDQ0LCAwLjAyNTAyLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjYxXCI6IFstMC4xMywgMC4zNywgMC4wNTA4NywgMCwgMC43Nzc3OF0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMC4xMTgwOSwgMCwgMC40NzIyMl0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC42NjY2N10sXG4gICAgXCI2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI2NlwiOiBbMCwgMC42OTQ0NCwgMC4wODI5MywgMCwgMC42NjY2N10sXG4gICAgXCI2N1wiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC42Mzg4OV0sXG4gICAgXCI2OFwiOiBbMCwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43MjIyM10sXG4gICAgXCI2OVwiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC41OTcyMl0sXG4gICAgXCI3MFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC41Njk0NV0sXG4gICAgXCI3MVwiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC42NjY2N10sXG4gICAgXCI3MlwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC43MDgzNF0sXG4gICAgXCI3M1wiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC4yNzc3OF0sXG4gICAgXCI3NFwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC40NzIyMl0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC42OTQ0NV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NDE2N10sXG4gICAgXCI3N1wiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC44NzVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNzA4MzRdLFxuICAgIFwiNzlcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNzM2MTFdLFxuICAgIFwiODBcIjogWzAsIDAuNjk0NDQsIDAuMDgyOTMsIDAsIDAuNjM4ODldLFxuICAgIFwiODFcIjogWzAuMTI1LCAwLjY5NDQ0LCAwLjA3NTU1LCAwLCAwLjczNjExXSxcbiAgICBcIjgyXCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjY0NTg0XSxcbiAgICBcIjgzXCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg0XCI6IFswLCAwLjY5NDQ0LCAwLjEzMzcyLCAwLCAwLjY4MDU2XSxcbiAgICBcIjg1XCI6IFswLCAwLjY5NDQ0LCAwLjA4MDk0LCAwLCAwLjY4NzVdLFxuICAgIFwiODZcIjogWzAsIDAuNjk0NDQsIDAuMTYxNSwgMCwgMC42NjY2N10sXG4gICAgXCI4N1wiOiBbMCwgMC42OTQ0NCwgMC4xNjE1LCAwLCAwLjk0NDQ1XSxcbiAgICBcIjg4XCI6IFswLCAwLjY5NDQ0LCAwLjEzMzcyLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg5XCI6IFswLCAwLjY5NDQ0LCAwLjE3MjYxLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkwXCI6IFswLCAwLjY5NDQ0LCAwLjExOTgzLCAwLCAwLjYxMTExXSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLjE1OTQyLCAwLCAwLjI4ODg5XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLjA4NzE5LCAwLCAwLjI4ODg5XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLjA3OTksIDAsIDAuNV0sXG4gICAgXCI5NVwiOiBbMC4zNSwgMC4wOTQ0NCwgMC4wODYxNiwgMCwgMC41XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ0NDQ0LCAwLjAwOTgxLCAwLCAwLjQ4MDU2XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLjAzMDU3LCAwLCAwLjUxNjY3XSxcbiAgICBcIjk5XCI6IFswLCAwLjQ0NDQ0LCAwLjA4MzM2LCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMC4wOTQ4MywgMCwgMC41MTY2N10sXG4gICAgXCIxMDFcIjogWzAsIDAuNDQ0NDQsIDAuMDY3NzgsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjIxNzA1LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMC4wMTc3OCwgMCwgMC41MTY2N10sXG4gICAgXCIxMDVcIjogWzAsIDAuNjc5MzcsIDAuMDk3MTgsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY3OTM3LCAwLjA5MTYyLCAwLCAwLjI2NjY3XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wODMzNiwgMCwgMC40ODg4OV0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAuMDk0ODMsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLjAxNzc4LCAwLCAwLjc5NDQ1XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NDQ0NCwgMC4wMTc3OCwgMCwgMC41MTY2N10sXG4gICAgXCIxMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDY2MTMsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDM4OSwgMCwgMC41MTY2N10sXG4gICAgXCIxMTNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDQxNjksIDAsIDAuNTE2NjddLFxuICAgIFwiMTE0XCI6IFswLCAwLjQ0NDQ0LCAwLjEwODM2LCAwLCAwLjM0MTY3XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NDQ0NCwgMC4wNzc4LCAwLCAwLjM4MzMzXSxcbiAgICBcIjExNlwiOiBbMCwgMC41NzE0MywgMC4wNzIyNSwgMCwgMC4zNjExMV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDQ0NDQsIDAuMDQxNjksIDAsIDAuNTE2NjddLFxuICAgIFwiMTE4XCI6IFswLCAwLjQ0NDQ0LCAwLjEwODM2LCAwLCAwLjQ2MTExXSxcbiAgICBcIjExOVwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC42ODMzNF0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDQ0NDQsIDAuMDkxNjksIDAsIDAuNDYxMTFdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjEwODM2LCAwLCAwLjQ2MTExXSxcbiAgICBcIjEyMlwiOiBbMCwgMC40NDQ0NCwgMC4wODc1MiwgMCwgMC40MzQ3Ml0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzI2NTksIDAuMDg4MjYsIDAsIDAuNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY3OTM3LCAwLjA2Mzg1LCAwLCAwLjVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczNzUyXSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDQ0NDQsIDAuMDQxNjksIDAsIDAuMjM4ODldLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjI2NjY3XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNzk5LCAwLCAwLjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzMTk0LCAwLjA4NDMyLCAwLCAwLjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjYwODg5LCAwLjA4Nzc2LCAwLCAwLjVdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA1LCAwLCAwLjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDgzLCAwLCAwLjVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY3OTM3LCAwLjA3Nzc0LCAwLCAwLjI3Nzc4XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Mzc1Ml0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjc2NTksIDAuMDg4MjYsIDAsIDAuNV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAuMDkyMDUsIDAsIDAuNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuNTQxNjddLFxuICAgIFwiOTE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY5NDQ0LCAwLjEyODE2LCAwLCAwLjY2NjY3XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC43MDgzNF0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTMzXCI6IFswLCAwLjY5NDQ0LCAwLjA5MDMxLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42OTQ0NCwgMC4wNDYwMywgMCwgMC43MjIyMl0sXG4gICAgXCI5MzZcIjogWzAsIDAuNjk0NDQsIDAuMDkwMzEsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjcyMjIyXSxcbiAgICBcIjgyMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDg2MTYsIDAsIDAuNV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NjE2LCAwLCAxLjBdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMC4wNzgxNiwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLjA3ODE2LCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAuMTQyMDUsIDAsIDAuNV0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLjAwMzE2LCAwLCAwLjVdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDVdLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIzNlwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc1ODM0XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiNDNcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNDRcIjogWzAuMTI1LCAwLjA4MzMzLCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjMzMzMzXSxcbiAgICBcIjQ2XCI6IFswLCAwLjA4MzMzLCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUwXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MlwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUzXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1NVwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU2XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1OFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI1OVwiOiBbMC4xMjUsIDAuNDQ0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNjFcIjogWy0wLjEzLCAwLjM3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIzXSxcbiAgICBcIjY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU5NzIyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2OTQ1XSxcbiAgICBcIjcxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjcyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwODM0XSxcbiAgICBcIjczXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjc1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY5NDQ1XSxcbiAgICBcIjc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MTY3XSxcbiAgICBcIjc3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI3OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDgzNF0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzYxMV0sXG4gICAgXCI4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4MVwiOiBbMC4xMjUsIDAuNjk0NDQsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiODJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjQ1ODRdLFxuICAgIFwiODNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiODVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjg3NV0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTQ0NCwgMC4wMTM4OSwgMCwgMC42NjY2N10sXG4gICAgXCI4N1wiOiBbMCwgMC42OTQ0NCwgMC4wMTM4OSwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4wMjUsIDAsIDAuNjY2NjddLFxuICAgIFwiOTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjg4ODldLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjg4ODldLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5NVwiOiBbMC4zNSwgMC4wOTQ0NCwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ4MDU2XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjk5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMDFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA2OTQ0LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMDVcIjogWzAsIDAuNjc5MzcsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY3OTM3LCAwLCAwLCAwLjI2NjY3XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC40ODg4OV0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMTFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC4zNDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMzgzMzNdLFxuICAgIFwiMTE2XCI6IFswLCAwLjU3MTQzLCAwLCAwLCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNDYxMTFdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAxMzg5LCAwLCAwLjY4MzM0XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NjExMV0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNDYxMTFdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQzNDcyXSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zMjY1OSwgMCwgMCwgMC41XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjc5MzcsIDAsIDAsIDAuNV0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiMTg0XCI6IFswLjE3MDE0LCAwLCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjMwNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4yMzg4OV0sXG4gICAgXCI1NjdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuMjY2NjddLFxuICAgIFwiNzEwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzMTk0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjYwODg5LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY3OTM3LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI3MzJcIjogWzAsIDAuNjc2NTksIDAsIDAsIDAuNV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTQxNjddLFxuICAgIFwiOTE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDgzNF0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjgyMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDI3NzgsIDAsIDAuNV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ0NDQ0LCAwLjAyNzc4LCAwLCAxLjBdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdXG4gIH0sXG4gIFwiU2NyaXB0LVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNjVcIjogWzAsIDAuNywgMC4yMjkyNSwgMCwgMC44MDI1M10sXG4gICAgXCI2NlwiOiBbMCwgMC43LCAwLjA0MDg3LCAwLCAwLjkwNzU3XSxcbiAgICBcIjY3XCI6IFswLCAwLjcsIDAuMTY4OSwgMCwgMC42NjYxOV0sXG4gICAgXCI2OFwiOiBbMCwgMC43LCAwLjA5MzcxLCAwLCAwLjc3NDQzXSxcbiAgICBcIjY5XCI6IFswLCAwLjcsIDAuMTg1ODMsIDAsIDAuNTYxNjJdLFxuICAgIFwiNzBcIjogWzAsIDAuNywgMC4xMzYzNCwgMCwgMC44OTU0NF0sXG4gICAgXCI3MVwiOiBbMCwgMC43LCAwLjE3MzIyLCAwLCAwLjYwOTYxXSxcbiAgICBcIjcyXCI6IFswLCAwLjcsIDAuMjk2OTQsIDAsIDAuOTY5MTldLFxuICAgIFwiNzNcIjogWzAsIDAuNywgMC4xOTE4OSwgMCwgMC44MDkwN10sXG4gICAgXCI3NFwiOiBbMC4yNzc3OCwgMC43LCAwLjE5MTg5LCAwLCAxLjA1MTU5XSxcbiAgICBcIjc1XCI6IFswLCAwLjcsIDAuMzEyNTksIDAsIDAuOTEzNjRdLFxuICAgIFwiNzZcIjogWzAsIDAuNywgMC4xOTE4OSwgMCwgMC44NzM3M10sXG4gICAgXCI3N1wiOiBbMCwgMC43LCAwLjE1OTgxLCAwLCAxLjA4MDMxXSxcbiAgICBcIjc4XCI6IFswLCAwLjcsIDAuMzUyNSwgMCwgMC45MDE1XSxcbiAgICBcIjc5XCI6IFswLCAwLjcsIDAuMDgwNzgsIDAsIDAuNzM3ODddLFxuICAgIFwiODBcIjogWzAsIDAuNywgMC4wODA3OCwgMCwgMS4wMTI2Ml0sXG4gICAgXCI4MVwiOiBbMCwgMC43LCAwLjAzMzA1LCAwLCAwLjg4MjgyXSxcbiAgICBcIjgyXCI6IFswLCAwLjcsIDAuMDYyNTksIDAsIDAuODVdLFxuICAgIFwiODNcIjogWzAsIDAuNywgMC4xOTE4OSwgMCwgMC44Njc2N10sXG4gICAgXCI4NFwiOiBbMCwgMC43LCAwLjI5MDg3LCAwLCAwLjc0Njk3XSxcbiAgICBcIjg1XCI6IFswLCAwLjcsIDAuMjU4MTUsIDAsIDAuNzk5OTZdLFxuICAgIFwiODZcIjogWzAsIDAuNywgMC4yNzUyMywgMCwgMC42MjIwNF0sXG4gICAgXCI4N1wiOiBbMCwgMC43LCAwLjI3NTIzLCAwLCAwLjgwNTMyXSxcbiAgICBcIjg4XCI6IFswLCAwLjcsIDAuMjYwMDYsIDAsIDAuOTQ0NDVdLFxuICAgIFwiODlcIjogWzAsIDAuNywgMC4yOTM5LCAwLCAwLjcwOTYxXSxcbiAgICBcIjkwXCI6IFswLCAwLjcsIDAuMjQwMzcsIDAsIDAuODIxMl0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdXG4gIH0sXG4gIFwiU2l6ZTEtUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI0MFwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NTgzNF0sXG4gICAgXCI0MVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NTgzNF0sXG4gICAgXCI0N1wiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC41Nzc3OF0sXG4gICAgXCI5MVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40MTY2N10sXG4gICAgXCI5MlwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC41Nzc3OF0sXG4gICAgXCI5M1wiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40MTY2N10sXG4gICAgXCIxMjNcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiMTI1XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiNzMyXCI6IFswLCAwLjcyMjIyLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjc3MFwiOiBbMCwgMC43MjIyMiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI3NzFcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODIxNFwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg1OTNcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODU5NVwiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NjU3XCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg2NTlcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcxOVwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC45NDQ0NV0sXG4gICAgXCI4NzIwXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjk0NDQ1XSxcbiAgICBcIjg3MjFcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiODczMFwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg3MzlcIjogWy0wLjAwNTk5LCAwLjYwNiwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI4NzQxXCI6IFstMC4wMDU5OSwgMC42MDYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODc0N1wiOiBbMC4zMDYxMiwgMC44MDUsIDAuMTk0NDUsIDAsIDAuNDcyMjJdLFxuICAgIFwiODc0OFwiOiBbMC4zMDYsIDAuODA1LCAwLjE5NDQ1LCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg3NDlcIjogWzAuMzA2LCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4NzUwXCI6IFswLjMwNjEyLCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4ODk2XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg4OTdcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODg5OFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4ODk5XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg5NjhcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiODk2OVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI4OTcwXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg5NzFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiOTE2OFwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEwMjE2XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEwMjE3XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEwNzUyXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzUzXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU0XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU2XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwNzU4XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XVxuICB9LFxuICBcIlNpemUyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDBcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiNDFcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiNDdcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODExMTFdLFxuICAgIFwiOTFcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiOTJcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODExMTFdLFxuICAgIFwiOTNcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiMTIzXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEyNVwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiNzMyXCI6IFswLCAwLjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiNzcwXCI6IFswLCAwLjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiNzcxXCI6IFswLCAwLjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiODcxOVwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4yNzc3OF0sXG4gICAgXCI4NzIwXCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjI3Nzc4XSxcbiAgICBcIjg3MjFcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuNDQ0NDVdLFxuICAgIFwiODczMFwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMS4wXSxcbiAgICBcIjg3NDdcIjogWzAuODYyMjUsIDEuMzYsIDAuNDQ0NDUsIDAsIDAuNTU1NTZdLFxuICAgIFwiODc0OFwiOiBbMC44NjIsIDEuMzYsIDAuNDQ0NDUsIDAsIDAuNTU1NTZdLFxuICAgIFwiODc0OVwiOiBbMC44NjIsIDEuMzYsIDAuNDQ0NDUsIDAsIDAuNTU1NTZdLFxuICAgIFwiODc1MFwiOiBbMC44NjIyNSwgMS4zNiwgMC40NDQ0NSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4ODk2XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg4OTdcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5OFwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4ODk5XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg5NjhcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiODk2OVwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCI4OTcwXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjg5NzFcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiMTAyMTZcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiMTAyMTdcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiMTA3NTJcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuNTExMTJdLFxuICAgIFwiMTA3NTNcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuNTExMTJdLFxuICAgIFwiMTA3NTRcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuNTExMTJdLFxuICAgIFwiMTA3NTZcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiMTA3NThcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdXG4gIH0sXG4gIFwiU2l6ZTMtUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI0MFwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC43MzYxMV0sXG4gICAgXCI0MVwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC43MzYxMV0sXG4gICAgXCI0N1wiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMS4wNDQ0NV0sXG4gICAgXCI5MVwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCI5MlwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMS4wNDQ0NV0sXG4gICAgXCI5M1wiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMjNcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzVdLFxuICAgIFwiMTI1XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNzUsIDAsIDAsIDEuNDQ0NDVdLFxuICAgIFwiNzMyXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjc3MFwiOiBbMCwgMC43NSwgMCwgMCwgMS40NDQ0NV0sXG4gICAgXCI3NzFcIjogWzAsIDAuNzUsIDAsIDAsIDEuNDQ0NDVdLFxuICAgIFwiODczMFwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg5NjhcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiODk2OVwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI4OTcwXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjg5NzFcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiMTAyMTZcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzVdLFxuICAgIFwiMTAyMTdcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzVdXG4gIH0sXG4gIFwiU2l6ZTQtUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI0MFwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC43OTE2N10sXG4gICAgXCI0MVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC43OTE2N10sXG4gICAgXCI0N1wiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMS4yNzc3OF0sXG4gICAgXCI5MVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI5MlwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMS4yNzc3OF0sXG4gICAgXCI5M1wiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCIxMjNcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuODA1NTZdLFxuICAgIFwiMTI1XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI3MTBcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiNzMyXCI6IFswLCAwLjgyNSwgMCwgMCwgMS44ODg5XSxcbiAgICBcIjc3MFwiOiBbMCwgMC44MjUsIDAsIDAsIDEuODg4OV0sXG4gICAgXCI3NzFcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiODczMFwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg5NjhcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODk2OVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4OTcwXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg5NzFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiOTExNVwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTZcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTdcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTE4XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTExOVwiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTEyMFwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMjFcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkxMjJcIjogWy0wLjAwMDk5LCAwLjYwMSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTIzXCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTI0XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTI1XCI6IFstMC4wMDA5OSwgMC42MDEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyNlwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyN1wiOiBbMWUtMDUsIDAuOSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTI4XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMjlcIjogWzAuOTAwMDEsIDAsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzMFwiOiBbMCwgMC4zLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMzFcIjogWzFlLTA1LCAwLjksIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzMlwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTMzXCI6IFswLjkwMDAxLCAwLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxNDNcIjogWzAuODg1MDIsIDAuOTE1LCAwLCAwLCAxLjA1NTU2XSxcbiAgICBcIjEwMjE2XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjEwMjE3XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjU3MzQ0XCI6IFstMC4wMDQ5OSwgMC42MDUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiNTczNDVcIjogWy0wLjAwNDk5LCAwLjYwNSwgMCwgMCwgMS4wNTU1Nl0sXG4gICAgXCI1NzY4MFwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4MVwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4MlwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4M1wiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV1cbiAgfSxcbiAgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM2XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzN1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0MFwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDFcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQyXCI6IFswLCAwLjUyMDgzLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0M1wiOiBbLTAuMDgwNTYsIDAuNTMwNTUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ0XCI6IFswLjEzODg5LCAwLjEyNSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDVcIjogWy0wLjA4MDU2LCAwLjUzMDU1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0NlwiOiBbMCwgMC4xMjUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ3XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1MVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU5XCI6IFswLjEzODg5LCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2MFwiOiBbLTAuMDU1NTYsIDAuNTU1NTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjYxXCI6IFstMC4xOTU0OSwgMC40MTU2MiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjJcIjogWy0wLjA1NTU2LCAwLjU1NTU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2M1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2OVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MVwiOiBbMC4xMzg4OSwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTFcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyXCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5M1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk1XCI6IFswLjA5NTE0LCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5OVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAzXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwNVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA2XCI6IFswLjIyMjIyLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTEyXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTNcIjogWzAuMjIyMjIsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNTUzNTgsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTIxXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyM1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI0XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjVcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyNlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTg0XCI6IFswLjE5NDQ1LCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU2N1wiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjU2NTk3LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNTY1NTUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjczMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzcwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NzFcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTIzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTM2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyNDJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyNTFcIjogWzAuMTExMTEsIDAuMjE5NDQsIDAsIDAsIDAuNTI1XVxuICB9XG59O1xuXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBtZXRyaWNzIHJlZ2FyZGluZyBmb250cyBhbmQgaW5kaXZpZHVhbCBzeW1ib2xzLiBUaGUgc2lnbWFcbiAqIGFuZCB4aSB2YXJpYWJsZXMsIGFzIHdlbGwgYXMgdGhlIG1ldHJpY01hcCBtYXAgY29udGFpbiBkYXRhIGV4dHJhY3RlZCBmcm9tXG4gKiBUZVgsIFRlWCBmb250IG1ldHJpY3MsIGFuZCB0aGUgVFRGIGZpbGVzLiBUaGVzZSBkYXRhIGFyZSB0aGVuIGV4cG9zZWQgdmlhIHRoZVxuICogYG1ldHJpY3NgIHZhcmlhYmxlIGFuZCB0aGUgZ2V0Q2hhcmFjdGVyTWV0cmljcyBmdW5jdGlvbi5cbiAqL1xuLy8gSW4gVGVYLCB0aGVyZSBhcmUgYWN0dWFsbHkgdGhyZWUgc2V0cyBvZiBkaW1lbnNpb25zLCBvbmUgZm9yIGVhY2ggb2Zcbi8vIHRleHRzdHlsZSAoc2l6ZSBpbmRleCA1IGFuZCBoaWdoZXI6ID49OXB0KSwgc2NyaXB0c3R5bGUgKHNpemUgaW5kZXggMyBhbmQgNDpcbi8vIDctOHB0KSwgYW5kIHNjcmlwdHNjcmlwdHN0eWxlIChzaXplIGluZGV4IDEgYW5kIDI6IDUtNnB0KS4gIFRoZXNlIGFyZVxuLy8gcHJvdmlkZWQgaW4gdGhlIGFycmF5cyBiZWxvdywgaW4gdGhhdCBvcmRlci5cbi8vXG4vLyBUaGUgZm9udCBtZXRyaWNzIGFyZSBzdG9yZWQgaW4gZm9udHMgY21zeTEwLCBjbXN5NywgYW5kIGNtc3k1IHJlc3BlY3RpdmVseS5cbi8vIFRoaXMgd2FzIGRldGVybWluZWQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIHNjcmlwdDpcbi8vXG4vLyAgICAgbGF0ZXggLWludGVyYWN0aW9uPW5vbnN0b3Btb2RlIFxcXG4vLyAgICAgJ1xcZG9jdW1lbnRjbGFzc3thcnRpY2xlfVxcdXNlcGFja2FnZXthbXNtYXRofVxcYmVnaW57ZG9jdW1lbnR9JyBcXFxuLy8gICAgICckYSQgXFxleHBhbmRhZnRlclxcc2hvd1xcdGhlXFx0ZXh0Zm9udDInIFxcXG4vLyAgICAgJ1xcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcc2NyaXB0Zm9udDInIFxcXG4vLyAgICAgJ1xcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcc2NyaXB0c2NyaXB0Zm9udDInIFxcXG4vLyAgICAgJ1xcc3RvcCdcbi8vXG4vLyBUaGUgbWV0cmljcyB0aGVtc2VsdmVzIHdlcmUgcmV0cmlldmVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6XG4vL1xuLy8gICAgIHRmdG9wbCBjbXN5MTBcbi8vICAgICB0ZnRvcGwgY21zeTdcbi8vICAgICB0ZnRvcGwgY21zeTVcbi8vXG4vLyBUaGUgb3V0cHV0IG9mIGVhY2ggb2YgdGhlc2UgY29tbWFuZHMgaXMgcXVpdGUgbGVuZ3RoeS4gIFRoZSBvbmx5IHBhcnQgd2Vcbi8vIGNhcmUgYWJvdXQgaXMgdGhlIEZPTlRESU1FTiBzZWN0aW9uLiBFYWNoIHZhbHVlIGlzIG1lYXN1cmVkIGluIEVNcy5cbnZhciBzaWdtYXNBbmRYaXMgPSB7XG4gIHNsYW50OiBbMC4yNTAsIDAuMjUwLCAwLjI1MF0sXG4gIC8vIHNpZ21hMVxuICBzcGFjZTogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTJcbiAgc3RyZXRjaDogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTNcbiAgc2hyaW5rOiBbMC4wMDAsIDAuMDAwLCAwLjAwMF0sXG4gIC8vIHNpZ21hNFxuICB4SGVpZ2h0OiBbMC40MzEsIDAuNDMxLCAwLjQzMV0sXG4gIC8vIHNpZ21hNVxuICBxdWFkOiBbMS4wMDAsIDEuMTcxLCAxLjQ3Ml0sXG4gIC8vIHNpZ21hNlxuICBleHRyYVNwYWNlOiBbMC4wMDAsIDAuMDAwLCAwLjAwMF0sXG4gIC8vIHNpZ21hN1xuICBudW0xOiBbMC42NzcsIDAuNzMyLCAwLjkyNV0sXG4gIC8vIHNpZ21hOFxuICBudW0yOiBbMC4zOTQsIDAuMzg0LCAwLjM4N10sXG4gIC8vIHNpZ21hOVxuICBudW0zOiBbMC40NDQsIDAuNDcxLCAwLjUwNF0sXG4gIC8vIHNpZ21hMTBcbiAgZGVub20xOiBbMC42ODYsIDAuNzUyLCAxLjAyNV0sXG4gIC8vIHNpZ21hMTFcbiAgZGVub20yOiBbMC4zNDUsIDAuMzQ0LCAwLjUzMl0sXG4gIC8vIHNpZ21hMTJcbiAgc3VwMTogWzAuNDEzLCAwLjUwMywgMC41MDRdLFxuICAvLyBzaWdtYTEzXG4gIHN1cDI6IFswLjM2MywgMC40MzEsIDAuNDA0XSxcbiAgLy8gc2lnbWExNFxuICBzdXAzOiBbMC4yODksIDAuMjg2LCAwLjI5NF0sXG4gIC8vIHNpZ21hMTVcbiAgc3ViMTogWzAuMTUwLCAwLjE0MywgMC4yMDBdLFxuICAvLyBzaWdtYTE2XG4gIHN1YjI6IFswLjI0NywgMC4yODYsIDAuNDAwXSxcbiAgLy8gc2lnbWExN1xuICBzdXBEcm9wOiBbMC4zODYsIDAuMzUzLCAwLjQ5NF0sXG4gIC8vIHNpZ21hMThcbiAgc3ViRHJvcDogWzAuMDUwLCAwLjA3MSwgMC4xMDBdLFxuICAvLyBzaWdtYTE5XG4gIGRlbGltMTogWzIuMzkwLCAxLjcwMCwgMS45ODBdLFxuICAvLyBzaWdtYTIwXG4gIGRlbGltMjogWzEuMDEwLCAxLjE1NywgMS40MjBdLFxuICAvLyBzaWdtYTIxXG4gIGF4aXNIZWlnaHQ6IFswLjI1MCwgMC4yNTAsIDAuMjUwXSxcbiAgLy8gc2lnbWEyMlxuICAvLyBUaGVzZSBmb250IG1ldHJpY3MgYXJlIGV4dHJhY3RlZCBmcm9tIFRlWCBieSB1c2luZyB0ZnRvcGwgb24gY21leDEwLnRmbTtcbiAgLy8gdGhleSBjb3JyZXNwb25kIHRvIHRoZSBmb250IHBhcmFtZXRlcnMgb2YgdGhlIGV4dGVuc2lvbiBmb250cyAoZmFtaWx5IDMpLlxuICAvLyBTZWUgdGhlIFRlWGJvb2ssIHBhZ2UgNDQxLiBJbiBBTVNUZVgsIHRoZSBleHRlbnNpb24gZm9udHMgc2NhbGU7IHRvXG4gIC8vIG1hdGNoIGNtZXg3LCB3ZSdkIHVzZSBjbWV4Ny50Zm0gdmFsdWVzIGZvciBzY3JpcHQgYW5kIHNjcmlwdHNjcmlwdFxuICAvLyB2YWx1ZXMuXG4gIGRlZmF1bHRSdWxlVGhpY2tuZXNzOiBbMC4wNCwgMC4wNDksIDAuMDQ5XSxcbiAgLy8geGk4OyBjbWV4NzogMC4wNDlcbiAgYmlnT3BTcGFjaW5nMTogWzAuMTExLCAwLjExMSwgMC4xMTFdLFxuICAvLyB4aTlcbiAgYmlnT3BTcGFjaW5nMjogWzAuMTY2LCAwLjE2NiwgMC4xNjZdLFxuICAvLyB4aTEwXG4gIGJpZ09wU3BhY2luZzM6IFswLjIsIDAuMiwgMC4yXSxcbiAgLy8geGkxMVxuICBiaWdPcFNwYWNpbmc0OiBbMC42LCAwLjYxMSwgMC42MTFdLFxuICAvLyB4aTEyOyBjbWV4NzogMC42MTFcbiAgYmlnT3BTcGFjaW5nNTogWzAuMSwgMC4xNDMsIDAuMTQzXSxcbiAgLy8geGkxMzsgY21leDc6IDAuMTQzXG4gIC8vIFRoZSBcXHNxcnQgcnVsZSB3aWR0aCBpcyB0YWtlbiBmcm9tIHRoZSBoZWlnaHQgb2YgdGhlIHN1cmQgY2hhcmFjdGVyLlxuICAvLyBTaW5jZSB3ZSB1c2UgdGhlIHNhbWUgZm9udCBhdCBhbGwgc2l6ZXMsIHRoaXMgdGhpY2tuZXNzIGRvZXNuJ3Qgc2NhbGUuXG4gIHNxcnRSdWxlVGhpY2tuZXNzOiBbMC4wNCwgMC4wNCwgMC4wNF0sXG4gIC8vIFRoaXMgdmFsdWUgZGV0ZXJtaW5lcyBob3cgbGFyZ2UgYSBwdCBpcywgZm9yIG1ldHJpY3Mgd2hpY2ggYXJlIGRlZmluZWRcbiAgLy8gaW4gdGVybXMgb2YgcHRzLlxuICAvLyBUaGlzIHZhbHVlIGlzIGFsc28gdXNlZCBpbiBrYXRleC5sZXNzOyBpZiB5b3UgY2hhbmdlIGl0IG1ha2Ugc3VyZSB0aGVcbiAgLy8gdmFsdWVzIG1hdGNoLlxuICBwdFBlckVtOiBbMTAuMCwgMTAuMCwgMTAuMF0sXG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIGFkamFjZW50IGB8YCBjb2x1bW5zIGluIGFuIGFycmF5IGRlZmluaXRpb24uIEZyb21cbiAgLy8gYFxcc2hvd3RoZVxcZG91YmxlcnVsZXNlcGAgaW4gTGFUZVguIEVxdWFscyAyLjAgLyBwdFBlckVtLlxuICBkb3VibGVSdWxlU2VwOiBbMC4yLCAwLjIsIDAuMl0sXG4gIC8vIFRoZSB3aWR0aCBvZiBzZXBhcmF0b3IgbGluZXMgaW4ge2FycmF5fSBlbnZpcm9ubWVudHMuIEZyb21cbiAgLy8gYFxcc2hvd3RoZVxcYXJyYXlydWxld2lkdGhgIGluIExhVGVYLiBFcXVhbHMgMC40IC8gcHRQZXJFbS5cbiAgYXJyYXlSdWxlV2lkdGg6IFswLjA0LCAwLjA0LCAwLjA0XSxcbiAgLy8gVHdvIHZhbHVlcyBmcm9tIExhVGVYIHNvdXJjZTJlOlxuICBmYm94c2VwOiBbMC4zLCAwLjMsIDAuM10sXG4gIC8vICAgICAgICAzIHB0IC8gcHRQZXJFbVxuICBmYm94cnVsZTogWzAuMDQsIDAuMDQsIDAuMDRdIC8vIDAuNCBwdCAvIHB0UGVyRW1cblxufTsgLy8gVGhpcyBtYXAgY29udGFpbnMgYSBtYXBwaW5nIGZyb20gZm9udCBuYW1lIGFuZCBjaGFyYWN0ZXIgY29kZSB0byBjaGFyYWN0ZXJcbi8vIHNob3VsZCBoYXZlIExhdGluLTEgYW5kIEN5cmlsbGljIGNoYXJhY3RlcnMsIGJ1dCBtYXkgbm90IGRlcGVuZGluZyBvbiB0aGVcbi8vIG9wZXJhdGluZyBzeXN0ZW0uICBUaGUgbWV0cmljcyBkbyBub3QgYWNjb3VudCBmb3IgZXh0cmEgaGVpZ2h0IGZyb20gdGhlXG4vLyBhY2NlbnRzLiAgSW4gdGhlIGNhc2Ugb2YgQ3lyaWxsaWMgY2hhcmFjdGVycyB3aGljaCBoYXZlIGJvdGggYXNjZW5kZXJzIGFuZFxuLy8gZGVzY2VuZGVycyB3ZSBwcmVmZXIgYXBwcm94aW1hdGlvbnMgd2l0aCBhc2NlbmRlcnMsIHByaW1hcmlseSB0byBwcmV2ZW50XG4vLyB0aGUgZnJhY3Rpb24gYmFyIG9yIHJvb3QgbGluZSBmcm9tIGludGVyc2VjdGluZyB0aGUgZ2x5cGguXG4vLyBUT0RPKGtldmluYikgYWxsb3cgdW5pb24gb2YgbXVsdGlwbGUgZ2x5cGggbWV0cmljcyBmb3IgYmV0dGVyIGFjY3VyYWN5LlxuXG52YXIgZXh0cmFDaGFyYWN0ZXJNYXAgPSB7XG4gIC8vIExhdGluLTFcbiAgJ8OFJzogJ0EnLFxuICAnw5AnOiAnRCcsXG4gICfDnic6ICdvJyxcbiAgJ8OlJzogJ2EnLFxuICAnw7AnOiAnZCcsXG4gICfDvic6ICdvJyxcbiAgLy8gQ3lyaWxsaWNcbiAgJ9CQJzogJ0EnLFxuICAn0JEnOiAnQicsXG4gICfQkic6ICdCJyxcbiAgJ9CTJzogJ0YnLFxuICAn0JQnOiAnQScsXG4gICfQlSc6ICdFJyxcbiAgJ9CWJzogJ0snLFxuICAn0JcnOiAnMycsXG4gICfQmCc6ICdOJyxcbiAgJ9CZJzogJ04nLFxuICAn0JonOiAnSycsXG4gICfQmyc6ICdOJyxcbiAgJ9CcJzogJ00nLFxuICAn0J0nOiAnSCcsXG4gICfQnic6ICdPJyxcbiAgJ9CfJzogJ04nLFxuICAn0KAnOiAnUCcsXG4gICfQoSc6ICdDJyxcbiAgJ9CiJzogJ1QnLFxuICAn0KMnOiAneScsXG4gICfQpCc6ICdPJyxcbiAgJ9ClJzogJ1gnLFxuICAn0KYnOiAnVScsXG4gICfQpyc6ICdoJyxcbiAgJ9CoJzogJ1cnLFxuICAn0KknOiAnVycsXG4gICfQqic6ICdCJyxcbiAgJ9CrJzogJ1gnLFxuICAn0KwnOiAnQicsXG4gICfQrSc6ICczJyxcbiAgJ9CuJzogJ1gnLFxuICAn0K8nOiAnUicsXG4gICfQsCc6ICdhJyxcbiAgJ9CxJzogJ2InLFxuICAn0LInOiAnYScsXG4gICfQsyc6ICdyJyxcbiAgJ9C0JzogJ3knLFxuICAn0LUnOiAnZScsXG4gICfQtic6ICdtJyxcbiAgJ9C3JzogJ2UnLFxuICAn0LgnOiAnbicsXG4gICfQuSc6ICduJyxcbiAgJ9C6JzogJ24nLFxuICAn0LsnOiAnbicsXG4gICfQvCc6ICdtJyxcbiAgJ9C9JzogJ24nLFxuICAn0L4nOiAnbycsXG4gICfQvyc6ICduJyxcbiAgJ9GAJzogJ3AnLFxuICAn0YEnOiAnYycsXG4gICfRgic6ICdvJyxcbiAgJ9GDJzogJ3knLFxuICAn0YQnOiAnYicsXG4gICfRhSc6ICd4JyxcbiAgJ9GGJzogJ24nLFxuICAn0YcnOiAnbicsXG4gICfRiCc6ICd3JyxcbiAgJ9GJJzogJ3cnLFxuICAn0YonOiAnYScsXG4gICfRiyc6ICdtJyxcbiAgJ9GMJzogJ2EnLFxuICAn0Y0nOiAnZScsXG4gICfRjic6ICdtJyxcbiAgJ9GPJzogJ3InXG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWRkcyBuZXcgZm9udCBtZXRyaWNzIHRvIGRlZmF1bHQgbWV0cmljTWFwXG4gKiBJdCBjYW4gYWxzbyBvdmVycmlkZSBleGlzdGluZyBtZXRyaWNzXG4gKi9cbmZ1bmN0aW9uIHNldEZvbnRNZXRyaWNzKGZvbnROYW1lLCBtZXRyaWNzKSB7XG4gIGZvbnRNZXRyaWNzRGF0YVtmb250TmFtZV0gPSBtZXRyaWNzO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGxvb2tpbmcgdXAgaW5mb3JtYXRpb24gaW4gdGhlXG4gKiBtZXRyaWNNYXAgdGFibGUuIEl0IHRha2VzIGEgY2hhcmFjdGVyIGFzIGEgc3RyaW5nLCBhbmQgYSBmb250LlxuICpcbiAqIE5vdGU6IHRoZSBgd2lkdGhgIHByb3BlcnR5IG1heSBiZSB1bmRlZmluZWQgaWYgZm9udE1ldHJpY3NEYXRhLmpzIHdhc24ndFxuICogYnVpbHQgdXNpbmcgYE1ha2UgZXh0ZW5kZWRfbWV0cmljc2AuXG4gKi9cblxuZnVuY3Rpb24gZ2V0Q2hhcmFjdGVyTWV0cmljcyhjaGFyYWN0ZXIsIGZvbnQsIG1vZGUpIHtcbiAgaWYgKCFmb250TWV0cmljc0RhdGFbZm9udF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGb250IG1ldHJpY3Mgbm90IGZvdW5kIGZvciBmb250OiBcIiArIGZvbnQgKyBcIi5cIik7XG4gIH1cblxuICB2YXIgY2ggPSBjaGFyYWN0ZXIuY2hhckNvZGVBdCgwKTtcbiAgdmFyIG1ldHJpY3MgPSBmb250TWV0cmljc0RhdGFbZm9udF1bY2hdO1xuXG4gIGlmICghbWV0cmljcyAmJiBjaGFyYWN0ZXJbMF0gaW4gZXh0cmFDaGFyYWN0ZXJNYXApIHtcbiAgICBjaCA9IGV4dHJhQ2hhcmFjdGVyTWFwW2NoYXJhY3RlclswXV0uY2hhckNvZGVBdCgwKTtcbiAgICBtZXRyaWNzID0gZm9udE1ldHJpY3NEYXRhW2ZvbnRdW2NoXTtcbiAgfVxuXG4gIGlmICghbWV0cmljcyAmJiBtb2RlID09PSAndGV4dCcpIHtcbiAgICAvLyBXZSBkb24ndCB0eXBpY2FsbHkgaGF2ZSBmb250IG1ldHJpY3MgZm9yIEFzaWFuIHNjcmlwdHMuXG4gICAgLy8gQnV0IHNpbmNlIHdlIHN1cHBvcnQgdGhlbSBpbiB0ZXh0IG1vZGUsIHdlIG5lZWQgdG8gcmV0dXJuXG4gICAgLy8gc29tZSBzb3J0IG9mIG1ldHJpY3MuXG4gICAgLy8gU28gaWYgdGhlIGNoYXJhY3RlciBpcyBpbiBhIHNjcmlwdCB3ZSBzdXBwb3J0IGJ1dCB3ZVxuICAgIC8vIGRvbid0IGhhdmUgbWV0cmljcyBmb3IgaXQsIGp1c3QgdXNlIHRoZSBtZXRyaWNzIGZvclxuICAgIC8vIHRoZSBMYXRpbiBjYXBpdGFsIGxldHRlciBNLiBUaGlzIGlzIGNsb3NlIGVub3VnaCBiZWNhdXNlXG4gICAgLy8gd2UgKGN1cnJlbnRseSkgb25seSBjYXJlIGFib3V0IHRoZSBoZWlnaHQgb2YgdGhlIGdseXBoXG4gICAgLy8gbm90IGl0cyB3aWR0aC5cbiAgICBpZiAoc3VwcG9ydGVkQ29kZXBvaW50KGNoKSkge1xuICAgICAgbWV0cmljcyA9IGZvbnRNZXRyaWNzRGF0YVtmb250XVs3N107IC8vIDc3IGlzIHRoZSBjaGFyY29kZSBmb3IgJ00nXG4gICAgfVxuICB9XG5cbiAgaWYgKG1ldHJpY3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVwdGg6IG1ldHJpY3NbMF0sXG4gICAgICBoZWlnaHQ6IG1ldHJpY3NbMV0sXG4gICAgICBpdGFsaWM6IG1ldHJpY3NbMl0sXG4gICAgICBza2V3OiBtZXRyaWNzWzNdLFxuICAgICAgd2lkdGg6IG1ldHJpY3NbNF1cbiAgICB9O1xuICB9XG59XG52YXIgZm9udE1ldHJpY3NCeVNpemVJbmRleCA9IHt9O1xuLyoqXG4gKiBHZXQgdGhlIGZvbnQgbWV0cmljcyBmb3IgYSBnaXZlbiBzaXplLlxuICovXG5cbmZ1bmN0aW9uIGdldEdsb2JhbE1ldHJpY3Moc2l6ZSkge1xuICB2YXIgc2l6ZUluZGV4O1xuXG4gIGlmIChzaXplID49IDUpIHtcbiAgICBzaXplSW5kZXggPSAwO1xuICB9IGVsc2UgaWYgKHNpemUgPj0gMykge1xuICAgIHNpemVJbmRleCA9IDE7XG4gIH0gZWxzZSB7XG4gICAgc2l6ZUluZGV4ID0gMjtcbiAgfVxuXG4gIGlmICghZm9udE1ldHJpY3NCeVNpemVJbmRleFtzaXplSW5kZXhdKSB7XG4gICAgdmFyIG1ldHJpY3MgPSBmb250TWV0cmljc0J5U2l6ZUluZGV4W3NpemVJbmRleF0gPSB7XG4gICAgICBjc3NFbVBlck11OiBzaWdtYXNBbmRYaXMucXVhZFtzaXplSW5kZXhdIC8gMThcbiAgICB9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNpZ21hc0FuZFhpcykge1xuICAgICAgaWYgKHNpZ21hc0FuZFhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIG1ldHJpY3Nba2V5XSA9IHNpZ21hc0FuZFhpc1trZXldW3NpemVJbmRleF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvbnRNZXRyaWNzQnlTaXplSW5kZXhbc2l6ZUluZGV4XTtcbn1cblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9wdGlvbnMgdGhhdCB0aGUgUGFyc2VyIGNhcnJpZXNcbiAqIGFyb3VuZCB3aXRoIGl0IHdoaWxlIHBhcnNpbmcuIERhdGEgaXMgaGVsZCBpbiBhbiBgT3B0aW9uc2Agb2JqZWN0LCBhbmQgd2hlblxuICogcmVjdXJzaW5nLCBhIG5ldyBgT3B0aW9uc2Agb2JqZWN0IGNhbiBiZSBjcmVhdGVkIHdpdGggdGhlIGAud2l0aCpgIGFuZFxuICogYC5yZXNldGAgZnVuY3Rpb25zLlxuICovXG52YXIgc2l6ZVN0eWxlTWFwID0gWy8vIEVhY2ggZWxlbWVudCBjb250YWlucyBbdGV4dHNpemUsIHNjcmlwdHNpemUsIHNjcmlwdHNjcmlwdHNpemVdLlxuLy8gVGhlIHNpemUgbWFwcGluZ3MgYXJlIHRha2VuIGZyb20gVGVYIHdpdGggXFxub3JtYWxzaXplPTEwcHQuXG5bMSwgMSwgMV0sIC8vIHNpemUxOiBbNSwgNSwgNV0gICAgICAgICAgICAgIFxcdGlueVxuWzIsIDEsIDFdLCAvLyBzaXplMjogWzYsIDUsIDVdXG5bMywgMSwgMV0sIC8vIHNpemUzOiBbNywgNSwgNV0gICAgICAgICAgICAgIFxcc2NyaXB0c2l6ZVxuWzQsIDIsIDFdLCAvLyBzaXplNDogWzgsIDYsIDVdICAgICAgICAgICAgICBcXGZvb3Rub3Rlc2l6ZVxuWzUsIDIsIDFdLCAvLyBzaXplNTogWzksIDYsIDVdICAgICAgICAgICAgICBcXHNtYWxsXG5bNiwgMywgMV0sIC8vIHNpemU2OiBbMTAsIDcsIDVdICAgICAgICAgICAgIFxcbm9ybWFsc2l6ZVxuWzcsIDQsIDJdLCAvLyBzaXplNzogWzEyLCA4LCA2XSAgICAgICAgICAgICBcXGxhcmdlXG5bOCwgNiwgM10sIC8vIHNpemU4OiBbMTQuNCwgMTAsIDddICAgICAgICAgIFxcTGFyZ2Vcbls5LCA3LCA2XSwgLy8gc2l6ZTk6IFsxNy4yOCwgMTIsIDEwXSAgICAgICAgXFxMQVJHRVxuWzEwLCA4LCA3XSwgLy8gc2l6ZTEwOiBbMjAuNzQsIDE0LjQsIDEyXSAgICAgXFxodWdlXG5bMTEsIDEwLCA5XSAvLyBzaXplMTE6IFsyNC44OCwgMjAuNzQsIDE3LjI4XSBcXEhVR0Vcbl07XG52YXIgc2l6ZU11bHRpcGxpZXJzID0gWy8vIGZvbnRNZXRyaWNzLmpzOmdldEdsb2JhbE1ldHJpY3MgYWxzbyB1c2VzIHNpemUgaW5kZXhlcywgc28gaWZcbi8vIHlvdSBjaGFuZ2Ugc2l6ZSBpbmRleGVzLCBjaGFuZ2UgdGhhdCBmdW5jdGlvbi5cbjAuNSwgMC42LCAwLjcsIDAuOCwgMC45LCAxLjAsIDEuMiwgMS40NCwgMS43MjgsIDIuMDc0LCAyLjQ4OF07XG5cbnZhciBzaXplQXRTdHlsZSA9IGZ1bmN0aW9uIHNpemVBdFN0eWxlKHNpemUsIHN0eWxlKSB7XG4gIHJldHVybiBzdHlsZS5zaXplIDwgMiA/IHNpemUgOiBzaXplU3R5bGVNYXBbc2l6ZSAtIDFdW3N0eWxlLnNpemUgLSAxXTtcbn07IC8vIEluIHRoZXNlIHR5cGVzLCBcIlwiIChlbXB0eSBzdHJpbmcpIG1lYW5zIFwibm8gY2hhbmdlXCIuXG5cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBtYWluIG9wdGlvbnMgY2xhc3MuIEl0IGNvbnRhaW5zIHRoZSBjdXJyZW50IHN0eWxlLCBzaXplLCBjb2xvcixcbiAqIGFuZCBmb250LlxuICpcbiAqIE9wdGlvbnMgb2JqZWN0cyBzaG91bGQgbm90IGJlIG1vZGlmaWVkLiBUbyBjcmVhdGUgYSBuZXcgT3B0aW9ucyB3aXRoXG4gKiBkaWZmZXJlbnQgcHJvcGVydGllcywgY2FsbCBhIGAuaGF2aW5nKmAgbWV0aG9kLlxuICovXG5jbGFzcyBPcHRpb25zIHtcbiAgLy8gQSBmb250IGZhbWlseSBhcHBsaWVzIHRvIGEgZ3JvdXAgb2YgZm9udHMgKGkuZS4gU2Fuc1NlcmlmKSwgd2hpbGUgYSBmb250XG4gIC8vIHJlcHJlc2VudHMgYSBzcGVjaWZpYyBmb250IChpLmUuIFNhbnNTZXJpZiBCb2xkKS5cbiAgLy8gU2VlOiBodHRwczovL3RleC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMjIzNTAvZGlmZmVyZW5jZS1iZXR3ZWVuLXRleHRybS1hbmQtbWF0aHJtXG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIHNpemUgaW5kZXguXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNvbG9yID0gdm9pZCAwO1xuICAgIHRoaXMuc2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMucGhhbnRvbSA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnQgPSB2b2lkIDA7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gdm9pZCAwO1xuICAgIHRoaXMuZm9udFdlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnRTaGFwZSA9IHZvaWQgMDtcbiAgICB0aGlzLnNpemVNdWx0aXBsaWVyID0gdm9pZCAwO1xuICAgIHRoaXMubWF4U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLm1pblJ1bGVUaGlja25lc3MgPSB2b2lkIDA7XG4gICAgdGhpcy5fZm9udE1ldHJpY3MgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IGRhdGEuc3R5bGU7XG4gICAgdGhpcy5jb2xvciA9IGRhdGEuY29sb3I7XG4gICAgdGhpcy5zaXplID0gZGF0YS5zaXplIHx8IE9wdGlvbnMuQkFTRVNJWkU7XG4gICAgdGhpcy50ZXh0U2l6ZSA9IGRhdGEudGV4dFNpemUgfHwgdGhpcy5zaXplO1xuICAgIHRoaXMucGhhbnRvbSA9ICEhZGF0YS5waGFudG9tO1xuICAgIHRoaXMuZm9udCA9IGRhdGEuZm9udCB8fCBcIlwiO1xuICAgIHRoaXMuZm9udEZhbWlseSA9IGRhdGEuZm9udEZhbWlseSB8fCBcIlwiO1xuICAgIHRoaXMuZm9udFdlaWdodCA9IGRhdGEuZm9udFdlaWdodCB8fCAnJztcbiAgICB0aGlzLmZvbnRTaGFwZSA9IGRhdGEuZm9udFNoYXBlIHx8ICcnO1xuICAgIHRoaXMuc2l6ZU11bHRpcGxpZXIgPSBzaXplTXVsdGlwbGllcnNbdGhpcy5zaXplIC0gMV07XG4gICAgdGhpcy5tYXhTaXplID0gZGF0YS5tYXhTaXplO1xuICAgIHRoaXMubWluUnVsZVRoaWNrbmVzcyA9IGRhdGEubWluUnVsZVRoaWNrbmVzcztcbiAgICB0aGlzLl9mb250TWV0cmljcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBzYW1lIHByb3BlcnRpZXMgYXMgXCJ0aGlzXCIuICBQcm9wZXJ0aWVzXG4gICAqIGZyb20gXCJleHRlbnNpb25cIiB3aWxsIGJlIGNvcGllZCB0byB0aGUgbmV3IG9wdGlvbnMgb2JqZWN0LlxuICAgKi9cblxuXG4gIGV4dGVuZChleHRlbnNpb24pIHtcbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIHN0eWxlOiB0aGlzLnN0eWxlLFxuICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgdGV4dFNpemU6IHRoaXMudGV4dFNpemUsXG4gICAgICBjb2xvcjogdGhpcy5jb2xvcixcbiAgICAgIHBoYW50b206IHRoaXMucGhhbnRvbSxcbiAgICAgIGZvbnQ6IHRoaXMuZm9udCxcbiAgICAgIGZvbnRGYW1pbHk6IHRoaXMuZm9udEZhbWlseSxcbiAgICAgIGZvbnRXZWlnaHQ6IHRoaXMuZm9udFdlaWdodCxcbiAgICAgIGZvbnRTaGFwZTogdGhpcy5mb250U2hhcGUsXG4gICAgICBtYXhTaXplOiB0aGlzLm1heFNpemUsXG4gICAgICBtaW5SdWxlVGhpY2tuZXNzOiB0aGlzLm1pblJ1bGVUaGlja25lc3NcbiAgICB9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIGV4dGVuc2lvbikge1xuICAgICAgaWYgKGV4dGVuc2lvbi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGRhdGFba2V5XSA9IGV4dGVuc2lvbltrZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgT3B0aW9ucyhkYXRhKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHN0eWxlLiBJZiBgdGhpcy5zdHlsZSA9PT0gc3R5bGVgLFxuICAgKiByZXR1cm5zIGB0aGlzYC5cbiAgICovXG5cblxuICBoYXZpbmdTdHlsZShzdHlsZSkge1xuICAgIGlmICh0aGlzLnN0eWxlID09PSBzdHlsZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgc2l6ZTogc2l6ZUF0U3R5bGUodGhpcy50ZXh0U2l6ZSwgc3R5bGUpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvcHRpb25zIG9iamVjdCB3aXRoIGEgY3JhbXBlZCB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IHN0eWxlLiBJZlxuICAgKiB0aGUgY3VycmVudCBzdHlsZSBpcyBjcmFtcGVkLCByZXR1cm5zIGB0aGlzYC5cbiAgICovXG5cblxuICBoYXZpbmdDcmFtcGVkU3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGF2aW5nU3R5bGUodGhpcy5zdHlsZS5jcmFtcCgpKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHNpemUgYW5kIGluIGF0IGxlYXN0IGBcXHRleHRzdHlsZWAuXG4gICAqIFJldHVybnMgYHRoaXNgIGlmIGFwcHJvcHJpYXRlLlxuICAgKi9cblxuXG4gIGhhdmluZ1NpemUoc2l6ZSkge1xuICAgIGlmICh0aGlzLnNpemUgPT09IHNpemUgJiYgdGhpcy50ZXh0U2l6ZSA9PT0gc2l6ZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICAgIHN0eWxlOiB0aGlzLnN0eWxlLnRleHQoKSxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgICAgdGV4dFNpemU6IHNpemUsXG4gICAgICAgIHNpemVNdWx0aXBsaWVyOiBzaXplTXVsdGlwbGllcnNbc2l6ZSAtIDFdXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIExpa2UgYHRoaXMuaGF2aW5nU2l6ZShCQVNFU0laRSkuaGF2aW5nU3R5bGUoc3R5bGUpYC4gSWYgYHN0eWxlYCBpcyBvbWl0dGVkLFxuICAgKiBjaGFuZ2VzIHRvIGF0IGxlYXN0IGBcXHRleHRzdHlsZWAuXG4gICAqL1xuXG5cbiAgaGF2aW5nQmFzZVN0eWxlKHN0eWxlKSB7XG4gICAgc3R5bGUgPSBzdHlsZSB8fCB0aGlzLnN0eWxlLnRleHQoKTtcbiAgICB2YXIgd2FudFNpemUgPSBzaXplQXRTdHlsZShPcHRpb25zLkJBU0VTSVpFLCBzdHlsZSk7XG5cbiAgICBpZiAodGhpcy5zaXplID09PSB3YW50U2l6ZSAmJiB0aGlzLnRleHRTaXplID09PSBPcHRpb25zLkJBU0VTSVpFICYmIHRoaXMuc3R5bGUgPT09IHN0eWxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaXplOiB3YW50U2l6ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGVmZmVjdCBvZiBzaXppbmcgY2hhbmdlcyBzdWNoIGFzIFxcSHVnZS5cbiAgICogS2VlcCB0aGUgZWZmZWN0IG9mIHRoZSBjdXJyZW50IHN0eWxlLCBzdWNoIGFzIFxcc2NyaXB0c3R5bGUuXG4gICAqL1xuXG5cbiAgaGF2aW5nQmFzZVNpemluZygpIHtcbiAgICB2YXIgc2l6ZTtcblxuICAgIHN3aXRjaCAodGhpcy5zdHlsZS5pZCkge1xuICAgICAgY2FzZSA0OlxuICAgICAgY2FzZSA1OlxuICAgICAgICBzaXplID0gMzsgLy8gbm9ybWFsc2l6ZSBpbiBzY3JpcHRzdHlsZVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDY6XG4gICAgICBjYXNlIDc6XG4gICAgICAgIHNpemUgPSAxOyAvLyBub3JtYWxzaXplIGluIHNjcmlwdHNjcmlwdHN0eWxlXG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHNpemUgPSA2O1xuICAgICAgLy8gbm9ybWFsc2l6ZSBpbiB0ZXh0c3R5bGUgb3IgZGlzcGxheXN0eWxlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIHN0eWxlOiB0aGlzLnN0eWxlLnRleHQoKSxcbiAgICAgIHNpemU6IHNpemVcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICAgKi9cblxuXG4gIHdpdGhDb2xvcihjb2xvcikge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBjb2xvcjogY29sb3JcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggXCJwaGFudG9tXCIgc2V0IHRvIHRydWUuXG4gICAqL1xuXG5cbiAgd2l0aFBoYW50b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIHBoYW50b206IHRydWVcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBtYXRoIGZvbnQgb3Igb2xkIHRleHQgZm9udC5cbiAgICogQHR5cGUge1t0eXBlXX1cbiAgICovXG5cblxuICB3aXRoRm9udChmb250KSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnRcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0cyB3aXRoIHRoZSBnaXZlbiBmb250RmFtaWx5LlxuICAgKi9cblxuXG4gIHdpdGhUZXh0Rm9udEZhbWlseShmb250RmFtaWx5KSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnRGYW1pbHksXG4gICAgICBmb250OiBcIlwiXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gZm9udCB3ZWlnaHRcbiAgICovXG5cblxuICB3aXRoVGV4dEZvbnRXZWlnaHQoZm9udFdlaWdodCkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBmb250V2VpZ2h0LFxuICAgICAgZm9udDogXCJcIlxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGZvbnQgd2VpZ2h0XG4gICAqL1xuXG5cbiAgd2l0aFRleHRGb250U2hhcGUoZm9udFNoYXBlKSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnRTaGFwZSxcbiAgICAgIGZvbnQ6IFwiXCJcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBDU1Mgc2l6aW5nIGNsYXNzZXMgcmVxdWlyZWQgdG8gc3dpdGNoIGZyb20gZW5jbG9zaW5nIG9wdGlvbnNcbiAgICogYG9sZE9wdGlvbnNgIHRvIGB0aGlzYC4gUmV0dXJucyBhbiBhcnJheSBvZiBjbGFzc2VzLlxuICAgKi9cblxuXG4gIHNpemluZ0NsYXNzZXMob2xkT3B0aW9ucykge1xuICAgIGlmIChvbGRPcHRpb25zLnNpemUgIT09IHRoaXMuc2l6ZSkge1xuICAgICAgcmV0dXJuIFtcInNpemluZ1wiLCBcInJlc2V0LXNpemVcIiArIG9sZE9wdGlvbnMuc2l6ZSwgXCJzaXplXCIgKyB0aGlzLnNpemVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIENTUyBzaXppbmcgY2xhc3NlcyByZXF1aXJlZCB0byBzd2l0Y2ggdG8gdGhlIGJhc2Ugc2l6ZS4gTGlrZVxuICAgKiBgdGhpcy5oYXZpbmdTaXplKEJBU0VTSVpFKS5zaXppbmdDbGFzc2VzKHRoaXMpYC5cbiAgICovXG5cblxuICBiYXNlU2l6aW5nQ2xhc3NlcygpIHtcbiAgICBpZiAodGhpcy5zaXplICE9PSBPcHRpb25zLkJBU0VTSVpFKSB7XG4gICAgICByZXR1cm4gW1wic2l6aW5nXCIsIFwicmVzZXQtc2l6ZVwiICsgdGhpcy5zaXplLCBcInNpemVcIiArIE9wdGlvbnMuQkFTRVNJWkVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGZvbnQgbWV0cmljcyBmb3IgdGhpcyBzaXplLlxuICAgKi9cblxuXG4gIGZvbnRNZXRyaWNzKCkge1xuICAgIGlmICghdGhpcy5fZm9udE1ldHJpY3MpIHtcbiAgICAgIHRoaXMuX2ZvbnRNZXRyaWNzID0gZ2V0R2xvYmFsTWV0cmljcyh0aGlzLnNpemUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9mb250TWV0cmljcztcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgQ1NTIGNvbG9yIG9mIHRoZSBjdXJyZW50IG9wdGlvbnMgb2JqZWN0XG4gICAqL1xuXG5cbiAgZ2V0Q29sb3IoKSB7XG4gICAgaWYgKHRoaXMucGhhbnRvbSkge1xuICAgICAgcmV0dXJuIFwidHJhbnNwYXJlbnRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY29sb3I7XG4gICAgfVxuICB9XG5cbn1cblxuT3B0aW9ucy5CQVNFU0laRSA9IDY7XG5cbi8qKlxuICogVGhpcyBmaWxlIGRvZXMgY29udmVyc2lvbiBiZXR3ZWVuIHVuaXRzLiAgSW4gcGFydGljdWxhciwgaXQgcHJvdmlkZXNcbiAqIGNhbGN1bGF0ZVNpemUgdG8gY29udmVydCBvdGhlciB1bml0cyBpbnRvIGVtcy5cbiAqL1xuLy8gVGh1cywgbXVsdGlwbHlpbmcgYSBsZW5ndGggYnkgdGhpcyBudW1iZXIgY29udmVydHMgdGhlIGxlbmd0aCBmcm9tIHVuaXRzXG4vLyBpbnRvIHB0cy4gIERpdmlkaW5nIHRoZSByZXN1bHQgYnkgcHRQZXJFbSBnaXZlcyB0aGUgbnVtYmVyIG9mIGVtc1xuLy8gKmFzc3VtaW5nKiBhIGZvbnQgc2l6ZSBvZiBwdFBlckVtIChub3JtYWwgc2l6ZSwgbm9ybWFsIHN0eWxlKS5cblxudmFyIHB0UGVyVW5pdCA9IHtcbiAgLy8gaHR0cHM6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvTGFUZVgvTGVuZ3RocyBhbmRcbiAgLy8gaHR0cHM6Ly90ZXguc3RhY2tleGNoYW5nZS5jb20vYS84MjYzXG4gIFwicHRcIjogMSxcbiAgLy8gVGVYIHBvaW50XG4gIFwibW1cIjogNzIyNyAvIDI1NDAsXG4gIC8vIG1pbGxpbWV0ZXJcbiAgXCJjbVwiOiA3MjI3IC8gMjU0LFxuICAvLyBjZW50aW1ldGVyXG4gIFwiaW5cIjogNzIuMjcsXG4gIC8vIGluY2hcbiAgXCJicFwiOiA4MDMgLyA4MDAsXG4gIC8vIGJpZyAoUG9zdFNjcmlwdCkgcG9pbnRzXG4gIFwicGNcIjogMTIsXG4gIC8vIHBpY2FcbiAgXCJkZFwiOiAxMjM4IC8gMTE1NyxcbiAgLy8gZGlkb3RcbiAgXCJjY1wiOiAxNDg1NiAvIDExNTcsXG4gIC8vIGNpY2VybyAoMTIgZGlkb3QpXG4gIFwibmRcIjogNjg1IC8gNjQyLFxuICAvLyBuZXcgZGlkb3RcbiAgXCJuY1wiOiAxMzcwIC8gMTA3LFxuICAvLyBuZXcgY2ljZXJvICgxMiBuZXcgZGlkb3QpXG4gIFwic3BcIjogMSAvIDY1NTM2LFxuICAvLyBzY2FsZWQgcG9pbnQgKFRlWCdzIGludGVybmFsIHNtYWxsZXN0IHVuaXQpXG4gIC8vIGh0dHBzOi8vdGV4LnN0YWNrZXhjaGFuZ2UuY29tL2EvNDEzNzFcbiAgXCJweFwiOiA4MDMgLyA4MDAgLy8gXFxwZGZweGRpbWVuIGRlZmF1bHRzIHRvIDEgYnAgaW4gcGRmVGVYIGFuZCBMdWFUZVhcblxufTsgLy8gRGljdGlvbmFyeSBvZiByZWxhdGl2ZSB1bml0cywgZm9yIGZhc3QgdmFsaWRpdHkgdGVzdGluZy5cblxudmFyIHJlbGF0aXZlVW5pdCA9IHtcbiAgXCJleFwiOiB0cnVlLFxuICBcImVtXCI6IHRydWUsXG4gIFwibXVcIjogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgc3BlY2lmaWVkIHVuaXQgKGVpdGhlciBhIHN0cmluZyBkZWZpbmluZyB0aGUgdW5pdFxuICogb3IgYSBcInNpemVcIiBwYXJzZSBub2RlIGNvbnRhaW5pbmcgYSB1bml0IGZpZWxkKSBpcyB2YWxpZC5cbiAqL1xudmFyIHZhbGlkVW5pdCA9IGZ1bmN0aW9uIHZhbGlkVW5pdCh1bml0KSB7XG4gIGlmICh0eXBlb2YgdW5pdCAhPT0gXCJzdHJpbmdcIikge1xuICAgIHVuaXQgPSB1bml0LnVuaXQ7XG4gIH1cblxuICByZXR1cm4gdW5pdCBpbiBwdFBlclVuaXQgfHwgdW5pdCBpbiByZWxhdGl2ZVVuaXQgfHwgdW5pdCA9PT0gXCJleFwiO1xufTtcbi8qXG4gKiBDb252ZXJ0IGEgXCJzaXplXCIgcGFyc2Ugbm9kZSAod2l0aCBudW1lcmljIFwibnVtYmVyXCIgYW5kIHN0cmluZyBcInVuaXRcIiBmaWVsZHMsXG4gKiBhcyBwYXJzZWQgYnkgZnVuY3Rpb25zLmpzIGFyZ1R5cGUgXCJzaXplXCIpIGludG8gYSBDU1MgZW0gdmFsdWUgZm9yIHRoZVxuICogY3VycmVudCBzdHlsZS9zY2FsZS4gIGBvcHRpb25zYCBnaXZlcyB0aGUgY3VycmVudCBvcHRpb25zLlxuICovXG5cbnZhciBjYWxjdWxhdGVTaXplID0gZnVuY3Rpb24gY2FsY3VsYXRlU2l6ZShzaXplVmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHNjYWxlO1xuXG4gIGlmIChzaXplVmFsdWUudW5pdCBpbiBwdFBlclVuaXQpIHtcbiAgICAvLyBBYnNvbHV0ZSB1bml0c1xuICAgIHNjYWxlID0gcHRQZXJVbml0W3NpemVWYWx1ZS51bml0XSAvLyBDb252ZXJ0IHVuaXQgdG8gcHRcbiAgICAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtIC8vIENvbnZlcnQgcHQgdG8gQ1NTIGVtXG4gICAgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyOyAvLyBVbnNjYWxlIHRvIG1ha2UgYWJzb2x1dGUgdW5pdHNcbiAgfSBlbHNlIGlmIChzaXplVmFsdWUudW5pdCA9PT0gXCJtdVwiKSB7XG4gICAgLy8gYG11YCB1bml0cyBzY2FsZSB3aXRoIHNjcmlwdHN0eWxlL3NjcmlwdHNjcmlwdHN0eWxlLlxuICAgIHNjYWxlID0gb3B0aW9ucy5mb250TWV0cmljcygpLmNzc0VtUGVyTXU7XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXIgcmVsYXRpdmUgdW5pdHMgYWx3YXlzIHJlZmVyIHRvIHRoZSAqdGV4dHN0eWxlKiBmb250XG4gICAgLy8gaW4gdGhlIGN1cnJlbnQgc2l6ZS5cbiAgICB2YXIgdW5pdE9wdGlvbnM7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pc1RpZ2h0KCkpIHtcbiAgICAgIC8vIGlzVGlnaHQoKSBtZWFucyBjdXJyZW50IHN0eWxlIGlzIHNjcmlwdC9zY3JpcHRzY3JpcHQuXG4gICAgICB1bml0T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS50ZXh0KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bml0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSAvLyBUT0RPOiBJbiBUZVggdGhlc2UgdW5pdHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBxdWFkIG9mIHRoZSBjdXJyZW50XG4gICAgLy8gKnRleHQqIGZvbnQsIGUuZy4gY21yMTAuIEthVGVYIGluc3RlYWQgdXNlcyB2YWx1ZXMgZnJvbSB0aGVcbiAgICAvLyBjb21wYXJhYmx5LXNpemVkICpDb21wdXRlciBNb2Rlcm4gc3ltYm9sKiBmb250LiBBdCAxMHB0LCB0aGVzZVxuICAgIC8vIG1hdGNoLiBBdCA3cHQgYW5kIDVwdCwgdGhleSBkaWZmZXI6IGNtcjc9MS4xMzg4OTQsIGNtc3k3PTEuMTcwNjQxO1xuICAgIC8vIGNtcjU9MS4zNjExMzMsIGNtc3k1PTEuNDcyMjQxLiBDb25zaWRlciAkXFxzY3JpcHRzaXplIGFcXGtlcm4xZW1iJC5cbiAgICAvLyBUZVggXFxzaG93bGlzdHMgc2hvd3MgYSBrZXJuIG9mIDEuMTM4ODkgKiBmb250c2l6ZTtcbiAgICAvLyBLYVRlWCBzaG93cyBhIGtlcm4gb2YgMS4xNzEgKiBmb250c2l6ZS5cblxuXG4gICAgaWYgKHNpemVWYWx1ZS51bml0ID09PSBcImV4XCIpIHtcbiAgICAgIHNjYWxlID0gdW5pdE9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0O1xuICAgIH0gZWxzZSBpZiAoc2l6ZVZhbHVlLnVuaXQgPT09IFwiZW1cIikge1xuICAgICAgc2NhbGUgPSB1bml0T3B0aW9ucy5mb250TWV0cmljcygpLnF1YWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCB1bml0OiAnXCIgKyBzaXplVmFsdWUudW5pdCArIFwiJ1wiKTtcbiAgICB9XG5cbiAgICBpZiAodW5pdE9wdGlvbnMgIT09IG9wdGlvbnMpIHtcbiAgICAgIHNjYWxlICo9IHVuaXRPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTWF0aC5taW4oc2l6ZVZhbHVlLm51bWJlciAqIHNjYWxlLCBvcHRpb25zLm1heFNpemUpO1xufTtcbi8qKlxuICogUm91bmQgYG5gIHRvIDQgZGVjaW1hbCBwbGFjZXMsIG9yIHRvIHRoZSBuZWFyZXN0IDEvMTAsMDAwdGggZW0uIFNlZVxuICogaHR0cHM6Ly9naXRodWIuY29tL0thVGVYL0thVGVYL3B1bGwvMjQ2MC5cbiAqL1xuXG52YXIgbWFrZUVtID0gZnVuY3Rpb24gbWFrZUVtKG4pIHtcbiAgcmV0dXJuICtuLnRvRml4ZWQoNCkgKyBcImVtXCI7XG59O1xuXG4vKipcbiAqIFRoZXNlIG9iamVjdHMgc3RvcmUgdGhlIGRhdGEgYWJvdXQgdGhlIERPTSBub2RlcyB3ZSBjcmVhdGUsIGFzIHdlbGwgYXMgc29tZVxuICogZXh0cmEgZGF0YS4gVGhleSBjYW4gdGhlbiBiZSB0cmFuc2Zvcm1lZCBpbnRvIHJlYWwgRE9NIG5vZGVzIHdpdGggdGhlXG4gKiBgdG9Ob2RlYCBmdW5jdGlvbiBvciBIVE1MIG1hcmt1cCB1c2luZyBgdG9NYXJrdXBgLiBUaGV5IGFyZSB1c2VmdWwgZm9yIGJvdGhcbiAqIHN0b3JpbmcgZXh0cmEgcHJvcGVydGllcyBvbiB0aGUgbm9kZXMsIGFzIHdlbGwgYXMgcHJvdmlkaW5nIGEgd2F5IHRvIGVhc2lseVxuICogd29yayB3aXRoIHRoZSBET00uXG4gKlxuICogU2ltaWxhciBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBNYXRoTUwgbm9kZXMgZXhpc3QgaW4gbWF0aE1MVHJlZS5qcy5cbiAqXG4gKiBUT0RPOiByZWZhY3RvciBgc3BhbmAgYW5kIGBhbmNob3JgIGludG8gY29tbW9uIHN1cGVyY2xhc3Mgd2hlblxuICogdGFyZ2V0IGVudmlyb25tZW50cyBzdXBwb3J0IGNsYXNzIGluaGVyaXRhbmNlXG4gKi9cblxuLyoqXG4gKiBDcmVhdGUgYW4gSFRNTCBjbGFzc05hbWUgYmFzZWQgb24gYSBsaXN0IG9mIGNsYXNzZXMuIEluIGFkZGl0aW9uIHRvIGpvaW5pbmdcbiAqIHdpdGggc3BhY2VzLCB3ZSBhbHNvIHJlbW92ZSBlbXB0eSBjbGFzc2VzLlxuICovXG52YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiBjcmVhdGVDbGFzcyhjbGFzc2VzKSB7XG4gIHJldHVybiBjbGFzc2VzLmZpbHRlcihjbHMgPT4gY2xzKS5qb2luKFwiIFwiKTtcbn07XG5cbnZhciBpbml0Tm9kZSA9IGZ1bmN0aW9uIGluaXROb2RlKGNsYXNzZXMsIG9wdGlvbnMsIHN0eWxlKSB7XG4gIHRoaXMuY2xhc3NlcyA9IGNsYXNzZXMgfHwgW107XG4gIHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuICB0aGlzLmhlaWdodCA9IDA7XG4gIHRoaXMuZGVwdGggPSAwO1xuICB0aGlzLm1heEZvbnRTaXplID0gMDtcbiAgdGhpcy5zdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuc3R5bGUuaXNUaWdodCgpKSB7XG4gICAgICB0aGlzLmNsYXNzZXMucHVzaChcIm10aWdodFwiKTtcbiAgICB9XG5cbiAgICB2YXIgY29sb3IgPSBvcHRpb25zLmdldENvbG9yKCk7XG5cbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIHRoaXMuc3R5bGUuY29sb3IgPSBjb2xvcjtcbiAgICB9XG4gIH1cbn07XG4vKipcbiAqIENvbnZlcnQgaW50byBhbiBIVE1MIG5vZGVcbiAqL1xuXG5cbnZhciB0b05vZGUgPSBmdW5jdGlvbiB0b05vZGUodGFnTmFtZSkge1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7IC8vIEFwcGx5IHRoZSBjbGFzc1xuXG4gIG5vZGUuY2xhc3NOYW1lID0gY3JlYXRlQ2xhc3ModGhpcy5jbGFzc2VzKTsgLy8gQXBwbHkgaW5saW5lIHN0eWxlc1xuXG4gIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICBpZiAodGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgIC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IHNlZW0gdG8gdW5kZXJzdGFuZCBzcGFuLnN0eWxlJ3MgdHlwZS5cbiAgICAgIG5vZGUuc3R5bGVbc3R5bGVdID0gdGhpcy5zdHlsZVtzdHlsZV07XG4gICAgfVxuICB9IC8vIEFwcGx5IGF0dHJpYnV0ZXNcblxuXG4gIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgaWYgKHRoaXMuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhdHRyKSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICB9XG4gIH0gLy8gQXBwZW5kIHRoZSBjaGlsZHJlbiwgYWxzbyBhcyBIVE1MIG5vZGVzXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBDb252ZXJ0IGludG8gYW4gSFRNTCBtYXJrdXAgc3RyaW5nXG4gKi9cblxuXG52YXIgdG9NYXJrdXAgPSBmdW5jdGlvbiB0b01hcmt1cCh0YWdOYW1lKSB7XG4gIHZhciBtYXJrdXAgPSBcIjxcIiArIHRhZ05hbWU7IC8vIEFkZCB0aGUgY2xhc3NcblxuICBpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCkge1xuICAgIG1hcmt1cCArPSBcIiBjbGFzcz1cXFwiXCIgKyB1dGlscy5lc2NhcGUoY3JlYXRlQ2xhc3ModGhpcy5jbGFzc2VzKSkgKyBcIlxcXCJcIjtcbiAgfVxuXG4gIHZhciBzdHlsZXMgPSBcIlwiOyAvLyBBZGQgdGhlIHN0eWxlcywgYWZ0ZXIgaHlwaGVuYXRpb25cblxuICBmb3IgKHZhciBzdHlsZSBpbiB0aGlzLnN0eWxlKSB7XG4gICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICBzdHlsZXMgKz0gdXRpbHMuaHlwaGVuYXRlKHN0eWxlKSArIFwiOlwiICsgdGhpcy5zdHlsZVtzdHlsZV0gKyBcIjtcIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzKSB7XG4gICAgbWFya3VwICs9IFwiIHN0eWxlPVxcXCJcIiArIHV0aWxzLmVzY2FwZShzdHlsZXMpICsgXCJcXFwiXCI7XG4gIH0gLy8gQWRkIHRoZSBhdHRyaWJ1dGVzXG5cblxuICBmb3IgKHZhciBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgIG1hcmt1cCArPSBcIiBcIiArIGF0dHIgKyBcIj1cXFwiXCIgKyB1dGlscy5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW2F0dHJdKSArIFwiXFxcIlwiO1xuICAgIH1cbiAgfVxuXG4gIG1hcmt1cCArPSBcIj5cIjsgLy8gQWRkIHRoZSBtYXJrdXAgb2YgdGhlIGNoaWxkcmVuLCBhbHNvIGFzIG1hcmt1cFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gIH1cblxuICBtYXJrdXAgKz0gXCI8L1wiICsgdGFnTmFtZSArIFwiPlwiO1xuICByZXR1cm4gbWFya3VwO1xufTsgLy8gTWFraW5nIHRoZSB0eXBlIGJlbG93IGV4YWN0IHdpdGggYWxsIG9wdGlvbmFsIGZpZWxkcyBkb2Vzbid0IHdvcmsgZHVlIHRvXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy80NTgyXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy81Njg4XG4vLyBIb3dldmVyLCBzaW5jZSAqYWxsKiBmaWVsZHMgYXJlIG9wdGlvbmFsLCAkU2hhcGU8PiB3b3JrcyBhcyBzdWdnZXN0ZWQgaW4gNTY4OFxuLy8gYWJvdmUuXG4vLyBUaGlzIHR5cGUgZG9lcyBub3QgaW5jbHVkZSBhbGwgQ1NTIHByb3BlcnRpZXMuIEFkZGl0aW9uYWwgcHJvcGVydGllcyBzaG91bGRcbi8vIGJlIGFkZGVkIGFzIG5lZWRlZC5cblxuXG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgc3BhbiBub2RlLCB3aXRoIGEgY2xhc3NOYW1lLCBhIGxpc3Qgb2YgY2hpbGRyZW4sIGFuZFxuICogYW4gaW5saW5lIHN0eWxlLiBJdCBhbHNvIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGl0cyBoZWlnaHQsIGRlcHRoLCBhbmRcbiAqIG1heEZvbnRTaXplLlxuICpcbiAqIFJlcHJlc2VudHMgdHdvIHR5cGVzIHdpdGggZGlmZmVyZW50IHVzZXM6IFN2Z1NwYW4gdG8gd3JhcCBhbiBTVkcgYW5kIERvbVNwYW5cbiAqIG90aGVyd2lzZS4gVGhpcyB0eXBlc2FmZXR5IGlzIGltcG9ydGFudCB3aGVuIEhUTUwgYnVpbGRlcnMgYWNjZXNzIGEgc3BhbidzXG4gKiBjaGlsZHJlbi5cbiAqL1xuY2xhc3MgU3BhbiB7XG4gIGNvbnN0cnVjdG9yKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSkge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmhlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmRlcHRoID0gdm9pZCAwO1xuICAgIHRoaXMud2lkdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIGluaXROb2RlLmNhbGwodGhpcywgY2xhc3Nlcywgb3B0aW9ucywgc3R5bGUpO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgfVxuICAvKipcbiAgICogU2V0cyBhbiBhcmJpdHJhcnkgYXR0cmlidXRlIG9uIHRoZSBzcGFuLiBXYXJuaW5nOiB1c2UgdGhpcyB3aXNlbHkuIE5vdFxuICAgKiBhbGwgYnJvd3NlcnMgc3VwcG9ydCBhdHRyaWJ1dGVzIHRoZSBzYW1lLCBhbmQgaGF2aW5nIHRvbyBtYW55IGN1c3RvbVxuICAgKiBhdHRyaWJ1dGVzIGlzIHByb2JhYmx5IGJhZC5cbiAgICovXG5cblxuICBzZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgIHRoaXMuYXR0cmlidXRlc1thdHRyaWJ1dGVdID0gdmFsdWU7XG4gIH1cblxuICBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIHJldHVybiB0b05vZGUuY2FsbCh0aGlzLCBcInNwYW5cIik7XG4gIH1cblxuICB0b01hcmt1cCgpIHtcbiAgICByZXR1cm4gdG9NYXJrdXAuY2FsbCh0aGlzLCBcInNwYW5cIik7XG4gIH1cblxufVxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhbiBhbmNob3IgKDxhPikgZWxlbWVudCB3aXRoIGEgaHlwZXJsaW5rLiAgU2VlIGBzcGFuYFxuICogZm9yIGZ1cnRoZXIgZGV0YWlscy5cbiAqL1xuXG5jbGFzcyBBbmNob3Ige1xuICBjb25zdHJ1Y3RvcihocmVmLCBjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucykge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmhlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmRlcHRoID0gdm9pZCAwO1xuICAgIHRoaXMubWF4Rm9udFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICBpbml0Tm9kZS5jYWxsKHRoaXMsIGNsYXNzZXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICB9XG5cbiAgc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNbYXR0cmlidXRlXSA9IHZhbHVlO1xuICB9XG5cbiAgaGFzQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIHV0aWxzLmNvbnRhaW5zKHRoaXMuY2xhc3NlcywgY2xhc3NOYW1lKTtcbiAgfVxuXG4gIHRvTm9kZSgpIHtcbiAgICByZXR1cm4gdG9Ob2RlLmNhbGwodGhpcywgXCJhXCIpO1xuICB9XG5cbiAgdG9NYXJrdXAoKSB7XG4gICAgcmV0dXJuIHRvTWFya3VwLmNhbGwodGhpcywgXCJhXCIpO1xuICB9XG5cbn1cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYW4gaW1hZ2UgZW1iZWQgKDxpbWc+KSBlbGVtZW50LlxuICovXG5cbmNsYXNzIEltZyB7XG4gIGNvbnN0cnVjdG9yKHNyYywgYWx0LCBzdHlsZSkge1xuICAgIHRoaXMuc3JjID0gdm9pZCAwO1xuICAgIHRoaXMuYWx0ID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmhlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmRlcHRoID0gdm9pZCAwO1xuICAgIHRoaXMubWF4Rm9udFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICB0aGlzLmFsdCA9IGFsdDtcbiAgICB0aGlzLnNyYyA9IHNyYztcbiAgICB0aGlzLmNsYXNzZXMgPSBbXCJtb3JkXCJdO1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbiAgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cblxuICB0b05vZGUoKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIG5vZGUuc3JjID0gdGhpcy5zcmM7XG4gICAgbm9kZS5hbHQgPSB0aGlzLmFsdDtcbiAgICBub2RlLmNsYXNzTmFtZSA9IFwibW9yZFwiOyAvLyBBcHBseSBpbmxpbmUgc3R5bGVzXG5cbiAgICBmb3IgKHZhciBzdHlsZSBpbiB0aGlzLnN0eWxlKSB7XG4gICAgICBpZiAodGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBub2RlLnN0eWxlW3N0eWxlXSA9IHRoaXMuc3R5bGVbc3R5bGVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgdG9NYXJrdXAoKSB7XG4gICAgdmFyIG1hcmt1cCA9IFwiPGltZyAgc3JjPSdcIiArIHRoaXMuc3JjICsgXCIgJ2FsdD0nXCIgKyB0aGlzLmFsdCArIFwiJyBcIjsgLy8gQWRkIHRoZSBzdHlsZXMsIGFmdGVyIGh5cGhlbmF0aW9uXG5cbiAgICB2YXIgc3R5bGVzID0gXCJcIjtcblxuICAgIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgICBzdHlsZXMgKz0gdXRpbHMuaHlwaGVuYXRlKHN0eWxlKSArIFwiOlwiICsgdGhpcy5zdHlsZVtzdHlsZV0gKyBcIjtcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3R5bGVzKSB7XG4gICAgICBtYXJrdXAgKz0gXCIgc3R5bGU9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHN0eWxlcykgKyBcIlxcXCJcIjtcbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCInLz5cIjtcbiAgICByZXR1cm4gbWFya3VwO1xuICB9XG5cbn1cbnZhciBpQ29tYmluYXRpb25zID0ge1xuICAnw64nOiAnXFx1MDEzMVxcdTAzMDInLFxuICAnw68nOiAnXFx1MDEzMVxcdTAzMDgnLFxuICAnw60nOiAnXFx1MDEzMVxcdTAzMDEnLFxuICAvLyAnxKsnOiAnXFx1MDEzMVxcdTAzMDQnLCAvLyBlbmFibGUgd2hlbiB3ZSBhZGQgRXh0ZW5kZWQgTGF0aW5cbiAgJ8OsJzogJ1xcdTAxMzFcXHUwMzAwJ1xufTtcbi8qKlxuICogQSBzeW1ib2wgbm9kZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBzeW1ib2wuIEl0IGVpdGhlciByZW5kZXJzXG4gKiB0byBhIHNpbmdsZSB0ZXh0IG5vZGUsIG9yIGEgc3BhbiB3aXRoIGEgc2luZ2xlIHRleHQgbm9kZSBpbiBpdCwgZGVwZW5kaW5nIG9uXG4gKiB3aGV0aGVyIGl0IGhhcyBDU1MgY2xhc3Nlcywgc3R5bGVzLCBvciBuZWVkcyBpdGFsaWMgY29ycmVjdGlvbi5cbiAqL1xuXG5jbGFzcyBTeW1ib2xOb2RlIHtcbiAgY29uc3RydWN0b3IodGV4dCwgaGVpZ2h0LCBkZXB0aCwgaXRhbGljLCBza2V3LCB3aWR0aCwgY2xhc3Nlcywgc3R5bGUpIHtcbiAgICB0aGlzLnRleHQgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLml0YWxpYyA9IHZvaWQgMDtcbiAgICB0aGlzLnNrZXcgPSB2b2lkIDA7XG4gICAgdGhpcy53aWR0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcbiAgICB0aGlzLmRlcHRoID0gZGVwdGggfHwgMDtcbiAgICB0aGlzLml0YWxpYyA9IGl0YWxpYyB8fCAwO1xuICAgIHRoaXMuc2tldyA9IHNrZXcgfHwgMDtcbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSBjbGFzc2VzIHx8IFtdO1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZSB8fCB7fTtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gMDsgLy8gTWFyayB0ZXh0IGZyb20gbm9uLUxhdGluIHNjcmlwdHMgd2l0aCBzcGVjaWZpYyBjbGFzc2VzIHNvIHRoYXQgd2VcbiAgICAvLyBjYW4gc3BlY2lmeSB3aGljaCBmb250cyB0byB1c2UuICBUaGlzIGFsbG93cyB1cyB0byByZW5kZXIgdGhlc2VcbiAgICAvLyBjaGFyYWN0ZXJzIHdpdGggYSBzZXJpZiBmb250IGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGJyb3dzZXIgd291bGRcbiAgICAvLyBlaXRoZXIgZGVmYXVsdCB0byBhIHNhbnMgc2VyaWYgb3IgcmVuZGVyIGEgcGxhY2Vob2xkZXIgY2hhcmFjdGVyLlxuICAgIC8vIFdlIHVzZSBDU1MgY2xhc3MgbmFtZXMgbGlrZSBjamtfZmFsbGJhY2ssIGhhbmd1bF9mYWxsYmFjayBhbmRcbiAgICAvLyBicmFobWljX2ZhbGxiYWNrLiBTZWUgLi91bmljb2RlU2NyaXB0cy5qcyBmb3IgdGhlIHNldCBvZiBwb3NzaWJsZVxuICAgIC8vIHNjcmlwdCBuYW1lc1xuXG4gICAgdmFyIHNjcmlwdCA9IHNjcmlwdEZyb21Db2RlcG9pbnQodGhpcy50ZXh0LmNoYXJDb2RlQXQoMCkpO1xuXG4gICAgaWYgKHNjcmlwdCkge1xuICAgICAgdGhpcy5jbGFzc2VzLnB1c2goc2NyaXB0ICsgXCJfZmFsbGJhY2tcIik7XG4gICAgfVxuXG4gICAgaWYgKC9bw67Dr8Otw6xdLy50ZXN0KHRoaXMudGV4dCkpIHtcbiAgICAgIC8vIGFkZCDEqyB3aGVuIHdlIGFkZCBFeHRlbmRlZCBMYXRpblxuICAgICAgdGhpcy50ZXh0ID0gaUNvbWJpbmF0aW9uc1t0aGlzLnRleHRdO1xuICAgIH1cbiAgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZXh0IG5vZGUgb3Igc3BhbiBmcm9tIGEgc3ltYm9sIG5vZGUuIE5vdGUgdGhhdCBhIHNwYW4gaXMgb25seVxuICAgKiBjcmVhdGVkIGlmIGl0IGlzIG5lZWRlZC5cbiAgICovXG5cblxuICB0b05vZGUoKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnRleHQpO1xuICAgIHZhciBzcGFuID0gbnVsbDtcblxuICAgIGlmICh0aGlzLml0YWxpYyA+IDApIHtcbiAgICAgIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIHNwYW4uc3R5bGUubWFyZ2luUmlnaHQgPSBtYWtlRW0odGhpcy5pdGFsaWMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgc3BhbiA9IHNwYW4gfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICBzcGFuLmNsYXNzTmFtZSA9IGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3Nlcyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgIHNwYW4gPSBzcGFuIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpOyAvLyAkRmxvd0ZpeE1lIEZsb3cgZG9lc24ndCBzZWVtIHRvIHVuZGVyc3RhbmQgc3Bhbi5zdHlsZSdzIHR5cGUuXG5cbiAgICAgICAgc3Bhbi5zdHlsZVtzdHlsZV0gPSB0aGlzLnN0eWxlW3N0eWxlXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3Bhbikge1xuICAgICAgc3Bhbi5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIHJldHVybiBzcGFuO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgbWFya3VwIGZvciBhIHN5bWJvbCBub2RlLlxuICAgKi9cblxuXG4gIHRvTWFya3VwKCkge1xuICAgIC8vIFRPRE8oYWxwZXJ0KTogTW9yZSBkdXBsaWNhdGlvbiB0aGFuIEknZCBsaWtlIGZyb21cbiAgICAvLyBzcGFuLnByb3RvdHlwZS50b01hcmt1cCBhbmQgc3ltYm9sTm9kZS5wcm90b3R5cGUudG9Ob2RlLi4uXG4gICAgdmFyIG5lZWRzU3BhbiA9IGZhbHNlO1xuICAgIHZhciBtYXJrdXAgPSBcIjxzcGFuXCI7XG5cbiAgICBpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCkge1xuICAgICAgbmVlZHNTcGFuID0gdHJ1ZTtcbiAgICAgIG1hcmt1cCArPSBcIiBjbGFzcz1cXFwiXCI7XG4gICAgICBtYXJrdXAgKz0gdXRpbHMuZXNjYXBlKGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3NlcykpO1xuICAgICAgbWFya3VwICs9IFwiXFxcIlwiO1xuICAgIH1cblxuICAgIHZhciBzdHlsZXMgPSBcIlwiO1xuXG4gICAgaWYgKHRoaXMuaXRhbGljID4gMCkge1xuICAgICAgc3R5bGVzICs9IFwibWFyZ2luLXJpZ2h0OlwiICsgdGhpcy5pdGFsaWMgKyBcImVtO1wiO1xuICAgIH1cblxuICAgIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgICBzdHlsZXMgKz0gdXRpbHMuaHlwaGVuYXRlKHN0eWxlKSArIFwiOlwiICsgdGhpcy5zdHlsZVtzdHlsZV0gKyBcIjtcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3R5bGVzKSB7XG4gICAgICBuZWVkc1NwYW4gPSB0cnVlO1xuICAgICAgbWFya3VwICs9IFwiIHN0eWxlPVxcXCJcIiArIHV0aWxzLmVzY2FwZShzdHlsZXMpICsgXCJcXFwiXCI7XG4gICAgfVxuXG4gICAgdmFyIGVzY2FwZWQgPSB1dGlscy5lc2NhcGUodGhpcy50ZXh0KTtcblxuICAgIGlmIChuZWVkc1NwYW4pIHtcbiAgICAgIG1hcmt1cCArPSBcIj5cIjtcbiAgICAgIG1hcmt1cCArPSBlc2NhcGVkO1xuICAgICAgbWFya3VwICs9IFwiPC9zcGFuPlwiO1xuICAgICAgcmV0dXJuIG1hcmt1cDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVzY2FwZWQ7XG4gICAgfVxuICB9XG5cbn1cbi8qKlxuICogU1ZHIG5vZGVzIGFyZSB1c2VkIHRvIHJlbmRlciBzdHJldGNoeSB3aWRlIGVsZW1lbnRzLlxuICovXG5cbmNsYXNzIFN2Z05vZGUge1xuICBjb25zdHJ1Y3RvcihjaGlsZHJlbiwgYXR0cmlidXRlcykge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gdm9pZCAwO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBzdmdOUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgXCJzdmdcIik7IC8vIEFwcGx5IGF0dHJpYnV0ZXNcblxuICAgIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGUuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlbltpXS50b05vZGUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCJcIjsgLy8gQXBwbHkgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9J1wiICsgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdICsgXCInXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPlwiO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIjwvc3ZnPlwiO1xuICAgIHJldHVybiBtYXJrdXA7XG4gIH1cblxufVxuY2xhc3MgUGF0aE5vZGUge1xuICBjb25zdHJ1Y3RvcihwYXRoTmFtZSwgYWx0ZXJuYXRlKSB7XG4gICAgdGhpcy5wYXRoTmFtZSA9IHZvaWQgMDtcbiAgICB0aGlzLmFsdGVybmF0ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnBhdGhOYW1lID0gcGF0aE5hbWU7XG4gICAgdGhpcy5hbHRlcm5hdGUgPSBhbHRlcm5hdGU7IC8vIFVzZWQgb25seSBmb3IgXFxzcXJ0LCBcXHBoYXNlLCAmIHRhbGwgZGVsaW1zXG4gIH1cblxuICB0b05vZGUoKSB7XG4gICAgdmFyIHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcInBhdGhcIik7XG5cbiAgICBpZiAodGhpcy5hbHRlcm5hdGUpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZFwiLCB0aGlzLmFsdGVybmF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZFwiLCBwYXRoW3RoaXMucGF0aE5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHRvTWFya3VwKCkge1xuICAgIGlmICh0aGlzLmFsdGVybmF0ZSkge1xuICAgICAgcmV0dXJuIFwiPHBhdGggZD0nXCIgKyB0aGlzLmFsdGVybmF0ZSArIFwiJy8+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIjxwYXRoIGQ9J1wiICsgcGF0aFt0aGlzLnBhdGhOYW1lXSArIFwiJy8+XCI7XG4gICAgfVxuICB9XG5cbn1cbmNsYXNzIExpbmVOb2RlIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBzdmdOUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgXCJsaW5lXCIpOyAvLyBBcHBseSBhdHRyaWJ1dGVzXG5cbiAgICBmb3IgKHZhciBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIGF0dHIpKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHIsIHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8bGluZVwiO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9J1wiICsgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdICsgXCInXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiLz5cIjtcbiAgICByZXR1cm4gbWFya3VwO1xuICB9XG5cbn1cbmZ1bmN0aW9uIGFzc2VydFN5bWJvbERvbU5vZGUoZ3JvdXApIHtcbiAgaWYgKGdyb3VwIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgIHJldHVybiBncm91cDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzeW1ib2xOb2RlIGJ1dCBnb3QgXCIgKyBTdHJpbmcoZ3JvdXApICsgXCIuXCIpO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRTcGFuKGdyb3VwKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIFNwYW4pIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgc3BhbjxIdG1sRG9tTm9kZT4gYnV0IGdvdCBcIiArIFN0cmluZyhncm91cCkgKyBcIi5cIik7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGZpbGUgaG9sZHMgYSBsaXN0IG9mIGFsbCBuby1hcmd1bWVudCBmdW5jdGlvbnMgYW5kIHNpbmdsZS1jaGFyYWN0ZXJcbiAqIHN5bWJvbHMgKGxpa2UgJ2EnIG9yICc7JykuXG4gKlxuICogRm9yIGVhY2ggb2YgdGhlIHN5bWJvbHMsIHRoZXJlIGFyZSB0aHJlZSBwcm9wZXJ0aWVzIHRoZXkgY2FuIGhhdmU6XG4gKiAtIGZvbnQgKHJlcXVpcmVkKTogdGhlIGZvbnQgdG8gYmUgdXNlZCBmb3IgdGhpcyBzeW1ib2wuIEVpdGhlciBcIm1haW5cIiAodGhlXG4gICAgIG5vcm1hbCBmb250KSwgb3IgXCJhbXNcIiAodGhlIGFtcyBmb250cykuXG4gKiAtIGdyb3VwIChyZXF1aXJlZCk6IHRoZSBQYXJzZU5vZGUgZ3JvdXAgdHlwZSB0aGUgc3ltYm9sIHNob3VsZCBoYXZlIChpLmUuXG4gICAgIFwidGV4dG9yZFwiLCBcIm1hdGhvcmRcIiwgZXRjKS5cbiAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9LYVRlWC9LYVRlWC93aWtpL0V4YW1pbmluZy1UZVgjZ3JvdXAtdHlwZXNcbiAqIC0gcmVwbGFjZTogdGhlIGNoYXJhY3RlciB0aGF0IHRoaXMgc3ltYm9sIG9yIGZ1bmN0aW9uIHNob3VsZCBiZVxuICogICByZXBsYWNlZCB3aXRoIChpLmUuIFwiXFxwaGlcIiBoYXMgYSByZXBsYWNlIHZhbHVlIG9mIFwiXFx1MDNkNVwiLCB0aGUgcGhpXG4gKiAgIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBmb250KS5cbiAqXG4gKiBUaGUgb3V0ZXJtb3N0IG1hcCBpbiB0aGUgdGFibGUgaW5kaWNhdGVzIHdoYXQgbW9kZSB0aGUgc3ltYm9scyBzaG91bGQgYmVcbiAqIGFjY2VwdGVkIGluIChlLmcuIFwibWF0aFwiIG9yIFwidGV4dFwiKS5cbiAqL1xuLy8gU29tZSBvZiB0aGVzZSBoYXZlIGEgXCItdG9rZW5cIiBzdWZmaXggc2luY2UgdGhlc2UgYXJlIGFsc28gdXNlZCBhcyBgUGFyc2VOb2RlYFxuLy8gdHlwZXMgZm9yIHJhdyB0ZXh0IHRva2VucywgYW5kIHdlIHdhbnQgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggaGlnaGVyLWxldmVsXG4vLyBgUGFyc2VOb2RlYCB0eXBlcy4gVGhlc2UgYFBhcnNlTm9kZWBzIGFyZSBjb25zdHJ1Y3RlZCB3aXRoaW4gYFBhcnNlcmAgYnlcbi8vIGxvb2tpbmcgdXAgdGhlIGBzeW1ib2xzYCBtYXAuXG52YXIgQVRPTVMgPSB7XG4gIFwiYmluXCI6IDEsXG4gIFwiY2xvc2VcIjogMSxcbiAgXCJpbm5lclwiOiAxLFxuICBcIm9wZW5cIjogMSxcbiAgXCJwdW5jdFwiOiAxLFxuICBcInJlbFwiOiAxXG59O1xudmFyIE5PTl9BVE9NUyA9IHtcbiAgXCJhY2NlbnQtdG9rZW5cIjogMSxcbiAgXCJtYXRob3JkXCI6IDEsXG4gIFwib3AtdG9rZW5cIjogMSxcbiAgXCJzcGFjaW5nXCI6IDEsXG4gIFwidGV4dG9yZFwiOiAxXG59O1xudmFyIHN5bWJvbHMgPSB7XG4gIFwibWF0aFwiOiB7fSxcbiAgXCJ0ZXh0XCI6IHt9XG59O1xuLyoqIGBhY2NlcHRVbmljb2RlQ2hhciA9IHRydWVgIGlzIG9ubHkgYXBwbGljYWJsZSBpZiBgcmVwbGFjZWAgaXMgc2V0LiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVTeW1ib2wobW9kZSwgZm9udCwgZ3JvdXAsIHJlcGxhY2UsIG5hbWUsIGFjY2VwdFVuaWNvZGVDaGFyKSB7XG4gIHN5bWJvbHNbbW9kZV1bbmFtZV0gPSB7XG4gICAgZm9udCxcbiAgICBncm91cCxcbiAgICByZXBsYWNlXG4gIH07XG5cbiAgaWYgKGFjY2VwdFVuaWNvZGVDaGFyICYmIHJlcGxhY2UpIHtcbiAgICBzeW1ib2xzW21vZGVdW3JlcGxhY2VdID0gc3ltYm9sc1ttb2RlXVtuYW1lXTtcbiAgfVxufSAvLyBTb21lIGFiYnJldmlhdGlvbnMgZm9yIGNvbW1vbmx5IHVzZWQgc3RyaW5ncy5cbi8vIFRoaXMgaGVscHMgbWluaWZ5IHRoZSBjb2RlLCBhbmQgYWxzbyBzcG90dGluZyB0eXBvcyB1c2luZyBqc2hpbnQuXG4vLyBtb2RlczpcblxudmFyIG1hdGggPSBcIm1hdGhcIjtcbnZhciB0ZXh0ID0gXCJ0ZXh0XCI7IC8vIGZvbnRzOlxuXG52YXIgbWFpbiA9IFwibWFpblwiO1xudmFyIGFtcyA9IFwiYW1zXCI7IC8vIGdyb3VwczpcblxudmFyIGFjY2VudCA9IFwiYWNjZW50LXRva2VuXCI7XG52YXIgYmluID0gXCJiaW5cIjtcbnZhciBjbG9zZSA9IFwiY2xvc2VcIjtcbnZhciBpbm5lciA9IFwiaW5uZXJcIjtcbnZhciBtYXRob3JkID0gXCJtYXRob3JkXCI7XG52YXIgb3AgPSBcIm9wLXRva2VuXCI7XG52YXIgb3BlbiA9IFwib3BlblwiO1xudmFyIHB1bmN0ID0gXCJwdW5jdFwiO1xudmFyIHJlbCA9IFwicmVsXCI7XG52YXIgc3BhY2luZyA9IFwic3BhY2luZ1wiO1xudmFyIHRleHRvcmQgPSBcInRleHRvcmRcIjsgLy8gTm93IGNvbWVzIHRoZSBzeW1ib2wgdGFibGVcbi8vIFJlbGF0aW9uIFN5bWJvbHNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjYxXCIsIFwiXFxcXGVxdWl2XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjdhXCIsIFwiXFxcXHByZWNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyN2JcIiwgXCJcXFxcc3VjY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjIzY1wiLCBcIlxcXFxzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyYTVcIiwgXCJcXFxccGVycFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MmFhZlwiLCBcIlxcXFxwcmVjZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTJhYjBcIiwgXCJcXFxcc3VjY2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQzXCIsIFwiXFxcXHNpbWVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjIzXCIsIFwiXFxcXG1pZFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2YVwiLCBcIlxcXFxsbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2YlwiLCBcIlxcXFxnZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI0ZFwiLCBcIlxcXFxhc3ltcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjIyNVwiLCBcIlxcXFxwYXJhbGxlbFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJjOFwiLCBcIlxcXFxib3d0aWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIzMjNcIiwgXCJcXFxcc21pbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyOTFcIiwgXCJcXFxcc3FzdWJzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI5MlwiLCBcIlxcXFxzcXN1cHNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjUwXCIsIFwiXFxcXGRvdGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMzIyXCIsIFwiXFxcXGZyb3duXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjBiXCIsIFwiXFxcXG5pXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjFkXCIsIFwiXFxcXHByb3B0b1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJhMlwiLCBcIlxcXFx2ZGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJhM1wiLCBcIlxcXFxkYXNodlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjIwYlwiLCBcIlxcXFxvd25zXCIpOyAvLyBQdW5jdHVhdGlvblxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcHVuY3QsIFwiXFx1MDAyZVwiLCBcIlxcXFxsZG90cFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBwdW5jdCwgXCJcXHUyMmM1XCIsIFwiXFxcXGNkb3RwXCIpOyAvLyBNaXNjIFN5bWJvbHNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDAyM1wiLCBcIlxcXFwjXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDAyM1wiLCBcIlxcXFwjXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDAyNlwiLCBcIlxcXFwmXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDAyNlwiLCBcIlxcXFwmXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjEzNVwiLCBcIlxcXFxhbGVwaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMDBcIiwgXCJcXFxcZm9yYWxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjEwZlwiLCBcIlxcXFxoYmFyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIwM1wiLCBcIlxcXFxleGlzdHNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjA3XCIsIFwiXFxcXG5hYmxhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjY2ZFwiLCBcIlxcXFxmbGF0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjExM1wiLCBcIlxcXFxlbGxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyNjZlXCIsIFwiXFxcXG5hdHVyYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyNjYzXCIsIFwiXFxcXGNsdWJzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjExOFwiLCBcIlxcXFx3cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NmZcIiwgXCJcXFxcc2hhcnBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyNjYyXCIsIFwiXFxcXGRpYW1vbmRzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjExY1wiLCBcIlxcXFxSZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NjFcIiwgXCJcXFxcaGVhcnRzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjExMVwiLCBcIlxcXFxJbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NjBcIiwgXCJcXFxcc3BhZGVzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhN1wiLCBcIlxcXFxTXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhN1wiLCBcIlxcXFxTXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBiNlwiLCBcIlxcXFxQXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBiNlwiLCBcIlxcXFxQXCIpOyAvLyBNYXRoIGFuZCBUZXh0XG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMjBcIiwgXCJcXFxcZGFnXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAyMFwiLCBcIlxcXFxkYWdcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXHRleHRkYWdnZXJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDIxXCIsIFwiXFxcXGRkYWdcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDIxXCIsIFwiXFxcXGRkYWdcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDIxXCIsIFwiXFxcXHRleHRkYWdnZXJkYmxcIik7IC8vIExhcmdlIERlbGltaXRlcnNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIlxcdTIzYjFcIiwgXCJcXFxccm1vdXN0YWNoZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIlxcdTIzYjBcIiwgXCJcXFxcbG1vdXN0YWNoZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBjbG9zZSwgXCJcXHUyN2VmXCIsIFwiXFxcXHJncm91cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIlxcdTI3ZWVcIiwgXCJcXFxcbGdyb3VwXCIsIHRydWUpOyAvLyBCaW5hcnkgT3BlcmF0b3JzXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxM1wiLCBcIlxcXFxtcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5NlwiLCBcIlxcXFxvbWludXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOGVcIiwgXCJcXFxcdXBsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTNcIiwgXCJcXFxcc3FjYXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMTdcIiwgXCJcXFxcYXN0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk0XCIsIFwiXFxcXHNxY3VwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyNWVmXCIsIFwiXFxcXGJpZ2NpcmNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMTlcIiwgXCJcXFxcYnVsbGV0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMDIxXCIsIFwiXFxcXGRkYWdnZXJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyNDBcIiwgXCJcXFxcd3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTJhM2ZcIiwgXCJcXFxcYW1hbGdcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTAwMjZcIiwgXCJcXFxcQW5kXCIpOyAvLyBmcm9tIGFtc21hdGhcbi8vIEFycm93IFN5bWJvbHNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyN2Y1XCIsIFwiXFxcXGxvbmdsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxZDBcIiwgXCJcXFxcTGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyN2Y4XCIsIFwiXFxcXExvbmdsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3ZjZcIiwgXCJcXFxcbG9uZ3JpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxZDJcIiwgXCJcXFxcUmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjdmOVwiLCBcIlxcXFxMb25ncmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5NFwiLCBcIlxcXFxsZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjdmN1wiLCBcIlxcXFxsb25nbGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxZDRcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3ZmFcIiwgXCJcXFxcTG9uZ2xlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWE2XCIsIFwiXFxcXG1hcHN0b1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjdmY1wiLCBcIlxcXFxsb25nbWFwc3RvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk3XCIsIFwiXFxcXG5lYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxYTlcIiwgXCJcXFxcaG9va2xlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFhYVwiLCBcIlxcXFxob29rcmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5OFwiLCBcIlxcXFxzZWFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWJjXCIsIFwiXFxcXGxlZnRoYXJwb29udXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxYzBcIiwgXCJcXFxccmlnaHRoYXJwb29udXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTlcIiwgXCJcXFxcc3dhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFiZFwiLCBcIlxcXFxsZWZ0aGFycG9vbmRvd25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxYzFcIiwgXCJcXFxccmlnaHRoYXJwb29uZG93blwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5NlwiLCBcIlxcXFxud2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWNjXCIsIFwiXFxcXHJpZ2h0bGVmdGhhcnBvb25zXCIsIHRydWUpOyAvLyBBTVMgTmVnYXRlZCBCaW5hcnkgUmVsYXRpb25zXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjZlXCIsIFwiXFxcXG5sZXNzXCIsIHRydWUpOyAvLyBTeW1ib2wgbmFtZXMgcHJlY2VlZGVkIGJ5IFwiQFwiIGVhY2ggaGF2ZSBhIGNvcnJlc3BvbmRpbmcgbWFjcm8uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDEwXCIsIFwiXFxcXEBubGVxc2xhbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxMVwiLCBcIlxcXFxAbmxlcXFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE4N1wiLCBcIlxcXFxsbmVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNjhcIiwgXCJcXFxcbG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAwY1wiLCBcIlxcXFxAbHZlcnRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZTZcIiwgXCJcXFxcbG5zaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE4OVwiLCBcIlxcXFxsbmFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjgwXCIsIFwiXFxcXG5wcmVjXCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMmUwIHRvIFxcbnByZWNjdXJseWVxLiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJlMFwiLCBcIlxcXFxucHJlY2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZThcIiwgXCJcXFxccHJlY25zaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmFiOVwiLCBcIlxcXFxwcmVjbmFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjQxXCIsIFwiXFxcXG5zaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAwNlwiLCBcIlxcXFxAbnNob3J0bWlkXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyMjRcIiwgXCJcXFxcbm1pZFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmFjXCIsIFwiXFxcXG52ZGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmFkXCIsIFwiXFxcXG52RGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmVhXCIsIFwiXFxcXG50cmlhbmdsZWxlZnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJlY1wiLCBcIlxcXFxudHJpYW5nbGVsZWZ0ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4YVwiLCBcIlxcXFxzdWJzZXRuZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxYVwiLCBcIlxcXFxAdmFyc3Vic2V0bmVxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhY2JcIiwgXCJcXFxcc3Vic2V0bmVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDE3XCIsIFwiXFxcXEB2YXJzdWJzZXRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNmZcIiwgXCJcXFxcbmd0clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDBmXCIsIFwiXFxcXEBuZ2Vxc2xhbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAwZVwiLCBcIlxcXFxAbmdlcXFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE4OFwiLCBcIlxcXFxnbmVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNjlcIiwgXCJcXFxcZ25lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAwZFwiLCBcIlxcXFxAZ3ZlcnRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZTdcIiwgXCJcXFxcZ25zaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE4YVwiLCBcIlxcXFxnbmFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjgxXCIsIFwiXFxcXG5zdWNjXCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMmUxIHRvIFxcbnN1Y2NjdXJseWVxLiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJlMVwiLCBcIlxcXFxuc3VjY2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZTlcIiwgXCJcXFxcc3VjY25zaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmFiYVwiLCBcIlxcXFxzdWNjbmFwcHJveFwiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjI0NiB0byBcXHNpbW5lcXEuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjQ2XCIsIFwiXFxcXG5jb25nXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMDdcIiwgXCJcXFxcQG5zaG9ydHBhcmFsbGVsXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyMjZcIiwgXCJcXFxcbnBhcmFsbGVsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYWZcIiwgXCJcXFxcblZEYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZWJcIiwgXCJcXFxcbnRyaWFuZ2xlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJlZFwiLCBcIlxcXFxudHJpYW5nbGVyaWdodGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMThcIiwgXCJcXFxcQG5zdXBzZXRlcXFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4YlwiLCBcIlxcXFxzdXBzZXRuZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxYlwiLCBcIlxcXFxAdmFyc3Vwc2V0bmVxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhY2NcIiwgXCJcXFxcc3Vwc2V0bmVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDE5XCIsIFwiXFxcXEB2YXJzdXBzZXRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYWVcIiwgXCJcXFxcblZkYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYjVcIiwgXCJcXFxccHJlY25lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmFiNlwiLCBcIlxcXFxzdWNjbmVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDE2XCIsIFwiXFxcXEBuc3Vic2V0ZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYjRcIiwgXCJcXFxcdW5saGRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJiNVwiLCBcIlxcXFx1bnJoZFwiKTsgLy8gQU1TIE5lZ2F0ZWQgQXJyb3dzXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMTlhXCIsIFwiXFxcXG5sZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjE5YlwiLCBcIlxcXFxucmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWNkXCIsIFwiXFxcXG5MZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjZlwiLCBcIlxcXFxuUmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWFlXCIsIFwiXFxcXG5sZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWNlXCIsIFwiXFxcXG5MZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTsgLy8gQU1TIE1pc2NcblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTI1YjNcIiwgXCJcXFxcdmFydHJpYW5nbGVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIxMGZcIiwgXCJcXFxcaHNsYXNoXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNWJkXCIsIFwiXFxcXHRyaWFuZ2xlZG93blwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjVjYVwiLCBcIlxcXFxsb3plbmdlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNGM4XCIsIFwiXFxcXGNpcmNsZWRTXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUwMGFlXCIsIFwiXFxcXGNpcmNsZWRSXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJcXHUwMGFlXCIsIFwiXFxcXGNpcmNsZWRSXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMjIxXCIsIFwiXFxcXG1lYXN1cmVkYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIyMDRcIiwgXCJcXFxcbmV4aXN0c1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjEyN1wiLCBcIlxcXFxtaG9cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIxMzJcIiwgXCJcXFxcRmludlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjE0MVwiLCBcIlxcXFxHYW1lXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMDM1XCIsIFwiXFxcXGJhY2twcmltZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjViMlwiLCBcIlxcXFxibGFja3RyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNWJjXCIsIFwiXFxcXGJsYWNrdHJpYW5nbGVkb3duXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNWEwXCIsIFwiXFxcXGJsYWNrc3F1YXJlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyOWViXCIsIFwiXFxcXGJsYWNrbG96ZW5nZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjYwNVwiLCBcIlxcXFxiaWdzdGFyXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMjIyXCIsIFwiXFxcXHNwaGVyaWNhbGFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMjAxXCIsIFwiXFxcXGNvbXBsZW1lbnRcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFUrRjAgdG8gXFxtYXRoZXRoLiBXZSBtYXAgdG8gQU1TIGZ1bmN0aW9uIFxcZXRoXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MDBmMFwiLCBcIlxcXFxldGhcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGYwXCIsIFwiXFx1MDBmMFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjU3MVwiLCBcIlxcXFxkaWFndXBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI1NzJcIiwgXCJcXFxcZGlhZ2Rvd25cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI1YTFcIiwgXCJcXFxcc3F1YXJlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNWExXCIsIFwiXFxcXEJveFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjVjYVwiLCBcIlxcXFxEaWFtb25kXCIpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBVK0E1IHRvIFxcbWF0aHllbi4gV2UgbWFwIHRvIEFNUyBmdW5jdGlvbiBcXHllblxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTAwYTVcIiwgXCJcXFxceWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJcXHUwMGE1XCIsIFwiXFxcXHllblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjcxM1wiLCBcIlxcXFxjaGVja21hcmtcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI3MTNcIiwgXCJcXFxcY2hlY2ttYXJrXCIpOyAvLyBBTVMgSGVicmV3XG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjEzNlwiLCBcIlxcXFxiZXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMTM4XCIsIFwiXFxcXGRhbGV0aFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjEzN1wiLCBcIlxcXFxnaW1lbFwiLCB0cnVlKTsgLy8gQU1TIEdyZWVrXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MDNkZFwiLCBcIlxcXFxkaWdhbW1hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUwM2YwXCIsIFwiXFxcXHZhcmthcHBhXCIpOyAvLyBBTVMgRGVsaW1pdGVyc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBvcGVuLCBcIlxcdTI1MGNcIiwgXCJcXFxcQHVsY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgY2xvc2UsIFwiXFx1MjUxMFwiLCBcIlxcXFxAdXJjb3JuZXJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBvcGVuLCBcIlxcdTI1MTRcIiwgXCJcXFxcQGxsY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgY2xvc2UsIFwiXFx1MjUxOFwiLCBcIlxcXFxAbHJjb3JuZXJcIiwgdHJ1ZSk7IC8vIEFNUyBCaW5hcnkgUmVsYXRpb25zXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjY2XCIsIFwiXFxcXGxlcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE3ZFwiLCBcIlxcXFxsZXFzbGFudFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYTk1XCIsIFwiXFxcXGVxc2xhbnRsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzJcIiwgXCJcXFxcbGVzc3NpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYTg1XCIsIFwiXFxcXGxlc3NhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0YVwiLCBcIlxcXFxhcHByb3hlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmQ2XCIsIFwiXFxcXGxlc3Nkb3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkOFwiLCBcIlxcXFxsbGxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3NlwiLCBcIlxcXFxsZXNzZ3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZGFcIiwgXCJcXFxcbGVzc2VxZ3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhOGJcIiwgXCJcXFxcbGVzc2VxcWd0clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUxXCIsIFwiXFxcXGRvdGVxZG90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNTNcIiwgXCJcXFxccmlzaW5nZG90c2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNTJcIiwgXCJcXFxcZmFsbGluZ2RvdHNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjNkXCIsIFwiXFxcXGJhY2tzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJjZFwiLCBcIlxcXFxiYWNrc2ltZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmFjNVwiLCBcIlxcXFxzdWJzZXRlcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkMFwiLCBcIlxcXFxTdWJzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4ZlwiLCBcIlxcXFxzcXN1YnNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjdjXCIsIFwiXFxcXHByZWNjdXJseWVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZGVcIiwgXCJcXFxcY3VybHllcXByZWNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3ZVwiLCBcIlxcXFxwcmVjc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYjdcIiwgXCJcXFxccHJlY2FwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmIyXCIsIFwiXFxcXHZhcnRyaWFuZ2xlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmI0XCIsIFwiXFxcXHRyaWFuZ2xlbGVmdGVxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYThcIiwgXCJcXFxcdkRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJhYVwiLCBcIlxcXFxWdmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjMyM1wiLCBcIlxcXFxzbWFsbHNtaWxlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIzMjJcIiwgXCJcXFxcc21hbGxmcm93blwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjRmXCIsIFwiXFxcXGJ1bXBlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjRlXCIsIFwiXFxcXEJ1bXBlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjY3XCIsIFwiXFxcXGdlcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE3ZVwiLCBcIlxcXFxnZXFzbGFudFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYTk2XCIsIFwiXFxcXGVxc2xhbnRndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3M1wiLCBcIlxcXFxndHJzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE4NlwiLCBcIlxcXFxndHJhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJkN1wiLCBcIlxcXFxndHJkb3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkOVwiLCBcIlxcXFxnZ2dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3N1wiLCBcIlxcXFxndHJsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZGJcIiwgXCJcXFxcZ3RyZXFsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhOGNcIiwgXCJcXFxcZ3RyZXFxbGVzc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjU2XCIsIFwiXFxcXGVxY2lyY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjU3XCIsIFwiXFxcXGNpcmNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjVjXCIsIFwiXFxcXHRyaWFuZ2xlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjNjXCIsIFwiXFxcXHRoaWNrc2ltXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNDhcIiwgXCJcXFxcdGhpY2thcHByb3hcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmFjNlwiLCBcIlxcXFxzdXBzZXRlcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkMVwiLCBcIlxcXFxTdXBzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI5MFwiLCBcIlxcXFxzcXN1cHNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjdkXCIsIFwiXFxcXHN1Y2NjdXJseWVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZGZcIiwgXCJcXFxcY3VybHllcXN1Y2NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3ZlwiLCBcIlxcXFxzdWNjc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYjhcIiwgXCJcXFxcc3VjY2FwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmIzXCIsIFwiXFxcXHZhcnRyaWFuZ2xlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJiNVwiLCBcIlxcXFx0cmlhbmdsZXJpZ2h0ZXFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJhOVwiLCBcIlxcXFxWZGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjIzXCIsIFwiXFxcXHNob3J0bWlkXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyMjVcIiwgXCJcXFxcc2hvcnRwYXJhbGxlbFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjZjXCIsIFwiXFxcXGJldHdlZW5cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkNFwiLCBcIlxcXFxwaXRjaGZvcmtcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIxZFwiLCBcIlxcXFx2YXJwcm9wdG9cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjVjMFwiLCBcIlxcXFxibGFja3RyaWFuZ2xlbGVmdFwiKTsgLy8gdW5pY29kZS1tYXRoIHNheXMgdGhhdCBcXHRoZXJlZm9yZSBpcyBhIG1hdGhvcmQgYXRvbS5cbi8vIFdlIGtlcHQgdGhlIGFtc3N5bWIgYXRvbSB0eXBlLCB3aGljaCBpcyByZWwuXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjM0XCIsIFwiXFxcXHRoZXJlZm9yZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjBkXCIsIFwiXFxcXGJhY2tlcHNpbG9uXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTI1YjZcIiwgXCJcXFxcYmxhY2t0cmlhbmdsZXJpZ2h0XCIpOyAvLyB1bmljb2RlLW1hdGggc2F5cyB0aGF0IFxcYmVjYXVzZSBpcyBhIG1hdGhvcmQgYXRvbS5cbi8vIFdlIGtlcHQgdGhlIGFtc3N5bWIgYXRvbSB0eXBlLCB3aGljaCBpcyByZWwuXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjM1XCIsIFwiXFxcXGJlY2F1c2VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkOFwiLCBcIlxcXFxsbGxlc3NcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkOVwiLCBcIlxcXFxnZ2d0clwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmIyXCIsIFwiXFxcXGxoZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmIzXCIsIFwiXFxcXHJoZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjQyXCIsIFwiXFxcXGVxc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmM4XCIsIFwiXFxcXEpvaW5cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1MVwiLCBcIlxcXFxEb3RlcVwiLCB0cnVlKTsgLy8gQU1TIEJpbmFyeSBPcGVyYXRvcnNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyMTRcIiwgXCJcXFxcZG90cGx1c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjE2XCIsIFwiXFxcXHNtYWxsc2V0bWludXNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJkMlwiLCBcIlxcXFxDYXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJkM1wiLCBcIlxcXFxDdXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MmE1ZVwiLCBcIlxcXFxkb3VibGViYXJ3ZWRnZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjlmXCIsIFwiXFxcXGJveG1pbnVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyOWVcIiwgXCJcXFxcYm94cGx1c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmM3XCIsIFwiXFxcXGRpdmlkZW9udGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjOVwiLCBcIlxcXFxsdGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjYVwiLCBcIlxcXFxydGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjYlwiLCBcIlxcXFxsZWZ0dGhyZWV0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmNjXCIsIFwiXFxcXHJpZ2h0dGhyZWV0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmNmXCIsIFwiXFxcXGN1cmx5d2VkZ2VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjZVwiLCBcIlxcXFxjdXJseXZlZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjlkXCIsIFwiXFxcXGNpcmNsZWRkYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyOWJcIiwgXCJcXFxcY2lyY2xlZGFzdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmM1XCIsIFwiXFxcXGNlbnRlcmRvdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmJhXCIsIFwiXFxcXGludGVyY2FsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyZDJcIiwgXCJcXFxcZG91YmxlY2FwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyZDNcIiwgXCJcXFxcZG91YmxlY3VwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYTBcIiwgXCJcXFxcYm94dGltZXNcIiwgdHJ1ZSk7IC8vIEFNUyBBcnJvd3Ncbi8vIE5vdGU6IHVuaWNvZGUtbWF0aCBtYXBzIFxcdTIxZTIgdG8gdGhlaXIgb3duIGZ1bmN0aW9uIFxccmlnaHRkYXNoYXJyb3cuXG4vLyBXZSdsbCBtYXAgaXQgdG8gQU1TIGZ1bmN0aW9uIFxcZGFzaHJpZ2h0YXJyb3cuIEl0IHByb2R1Y2VzIHRoZSBzYW1lIGF0b20uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWUyXCIsIFwiXFxcXGRhc2hyaWdodGFycm93XCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMWUwIHRvIFxcbGVmdGRhc2hhcnJvdy4gV2UnbGwgdXNlIHRoZSBBTVMgc3lub255bS5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxZTBcIiwgXCJcXFxcZGFzaGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWM3XCIsIFwiXFxcXGxlZnRsZWZ0YXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYzZcIiwgXCJcXFxcbGVmdHJpZ2h0YXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxZGFcIiwgXCJcXFxcTGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMTllXCIsIFwiXFxcXHR3b2hlYWRsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFhMlwiLCBcIlxcXFxsZWZ0YXJyb3d0YWlsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYWJcIiwgXCJcXFxcbG9vcGFycm93bGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWNiXCIsIFwiXFxcXGxlZnRyaWdodGhhcnBvb25zXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYjZcIiwgXCJcXFxcY3VydmVhcnJvd2xlZnRcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFxcdTIxYmEgdG8gXFxhY3dvcGVuY2lyY2xlYXJyb3cuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWJhXCIsIFwiXFxcXGNpcmNsZWFycm93bGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWIwXCIsIFwiXFxcXExzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWM4XCIsIFwiXFxcXHVwdXBhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFiZlwiLCBcIlxcXFx1cGhhcnBvb25sZWZ0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYzNcIiwgXCJcXFxcZG93bmhhcnBvb25sZWZ0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmI2XCIsIFwiXFxcXG9yaWdvZlwiLCB0cnVlKTsgLy8gbm90IGluIGZvbnRcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmI3XCIsIFwiXFxcXGltYWdlb2ZcIiwgdHJ1ZSk7IC8vIG5vdCBpbiBmb250XG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmI4XCIsIFwiXFxcXG11bHRpbWFwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYWRcIiwgXCJcXFxcbGVmdHJpZ2h0c3F1aWdhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWM5XCIsIFwiXFxcXHJpZ2h0cmlnaHRhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjNFwiLCBcIlxcXFxyaWdodGxlZnRhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFhMFwiLCBcIlxcXFx0d29oZWFkcmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWEzXCIsIFwiXFxcXHJpZ2h0YXJyb3d0YWlsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYWNcIiwgXCJcXFxcbG9vcGFycm93cmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFiN1wiLCBcIlxcXFxjdXJ2ZWFycm93cmlnaHRcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFxcdTIxYmIgdG8gXFxjd29wZW5jaXJjbGVhcnJvdy4gV2UnbGwgdXNlIHRoZSBBTVMgc3lub255bS5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYmJcIiwgXCJcXFxcY2lyY2xlYXJyb3dyaWdodFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWIxXCIsIFwiXFxcXFJzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWNhXCIsIFwiXFxcXGRvd25kb3duYXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYmVcIiwgXCJcXFxcdXBoYXJwb29ucmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjMlwiLCBcIlxcXFxkb3duaGFycG9vbnJpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxZGRcIiwgXCJcXFxccmlnaHRzcXVpZ2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxZGRcIiwgXCJcXFxcbGVhZHN0b1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWRiXCIsIFwiXFxcXFJyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYmVcIiwgXCJcXFxccmVzdHJpY3Rpb25cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDE4XCIsIFwiYFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIiRcIiwgXCJcXFxcJFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIiRcIiwgXCJcXFxcJFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIiRcIiwgXCJcXFxcdGV4dGRvbGxhclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIiVcIiwgXCJcXFxcJVwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIiVcIiwgXCJcXFxcJVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIl9cIiwgXCJcXFxcX1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIl9cIiwgXCJcXFxcX1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIl9cIiwgXCJcXFxcdGV4dHVuZGVyc2NvcmVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjIwXCIsIFwiXFxcXGFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIxZVwiLCBcIlxcXFxpbmZ0eVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMzJcIiwgXCJcXFxccHJpbWVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyNWIzXCIsIFwiXFxcXHRyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDM5M1wiLCBcIlxcXFxHYW1tYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzOTRcIiwgXCJcXFxcRGVsdGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMzk4XCIsIFwiXFxcXFRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDM5YlwiLCBcIlxcXFxMYW1iZGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMzllXCIsIFwiXFxcXFhpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDNhMFwiLCBcIlxcXFxQaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzYTNcIiwgXCJcXFxcU2lnbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwM2E1XCIsIFwiXFxcXFVwc2lsb25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwM2E2XCIsIFwiXFxcXFBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzYThcIiwgXCJcXFxcUHNpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDNhOVwiLCBcIlxcXFxPbWVnYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIkFcIiwgXCJcXHUwMzkxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiQlwiLCBcIlxcdTAzOTJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJFXCIsIFwiXFx1MDM5NVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlpcIiwgXCJcXHUwMzk2XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiSFwiLCBcIlxcdTAzOTdcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJJXCIsIFwiXFx1MDM5OVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIktcIiwgXCJcXHUwMzlBXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiTVwiLCBcIlxcdTAzOUNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJOXCIsIFwiXFx1MDM5RFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIk9cIiwgXCJcXHUwMzlGXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiUFwiLCBcIlxcdTAzQTFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJUXCIsIFwiXFx1MDNBNFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlhcIiwgXCJcXHUwM0E3XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhY1wiLCBcIlxcXFxuZWdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGFjXCIsIFwiXFxcXGxub3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMmE0XCIsIFwiXFxcXHRvcFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyYTVcIiwgXCJcXFxcYm90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIwNVwiLCBcIlxcXFxlbXB0eXNldFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjIwNVwiLCBcIlxcXFx2YXJub3RoaW5nXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiMVwiLCBcIlxcXFxhbHBoYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjJcIiwgXCJcXFxcYmV0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjNcIiwgXCJcXFxcZ2FtbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2I0XCIsIFwiXFxcXGRlbHRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNmNVwiLCBcIlxcXFxlcHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiNlwiLCBcIlxcXFx6ZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiN1wiLCBcIlxcXFxldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2I4XCIsIFwiXFxcXHRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiOVwiLCBcIlxcXFxpb3RhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiYVwiLCBcIlxcXFxrYXBwYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYmJcIiwgXCJcXFxcbGFtYmRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiY1wiLCBcIlxcXFxtdVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYmRcIiwgXCJcXFxcbnVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2JlXCIsIFwiXFxcXHhpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiZlwiLCBcIlxcXFxvbWljcm9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjMFwiLCBcIlxcXFxwaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzFcIiwgXCJcXFxccmhvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjM1wiLCBcIlxcXFxzaWdtYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzRcIiwgXCJcXFxcdGF1XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjNVwiLCBcIlxcXFx1cHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNkNVwiLCBcIlxcXFxwaGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2M3XCIsIFwiXFxcXGNoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzhcIiwgXCJcXFxccHNpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjOVwiLCBcIlxcXFxvbWVnYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjVcIiwgXCJcXFxcdmFyZXBzaWxvblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzZDFcIiwgXCJcXFxcdmFydGhldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2Q2XCIsIFwiXFxcXHZhcnBpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNmMVwiLCBcIlxcXFx2YXJyaG9cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2MyXCIsIFwiXFxcXHZhcnNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjNlwiLCBcIlxcXFx2YXJwaGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMTdcIiwgXCIqXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCIrXCIsIFwiK1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxMlwiLCBcIi1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyYzVcIiwgXCJcXFxcY2RvdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxOFwiLCBcIlxcXFxjaXJjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUwMGY3XCIsIFwiXFxcXGRpdlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MDBiMVwiLCBcIlxcXFxwbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MDBkN1wiLCBcIlxcXFx0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIyOVwiLCBcIlxcXFxjYXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMmFcIiwgXCJcXFxcY3VwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjE2XCIsIFwiXFxcXHNldG1pbnVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI3XCIsIFwiXFxcXGxhbmRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMjhcIiwgXCJcXFxcbG9yXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI3XCIsIFwiXFxcXHdlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI4XCIsIFwiXFxcXHZlZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMWFcIiwgXCJcXFxcc3VyZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIlxcdTI3ZThcIiwgXCJcXFxcbGFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wZW4sIFwiXFx1MjIyM1wiLCBcIlxcXFxsdmVydFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIlxcdTIyMjVcIiwgXCJcXFxcbFZlcnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiP1wiLCBcIj9cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiIVwiLCBcIiFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiXFx1MjdlOVwiLCBcIlxcXFxyYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiXFx1MjIyM1wiLCBcIlxcXFxydmVydFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBjbG9zZSwgXCJcXHUyMjI1XCIsIFwiXFxcXHJWZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCI9XCIsIFwiPVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiOlwiLCBcIjpcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNDhcIiwgXCJcXFxcYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQ1XCIsIFwiXFxcXGNvbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjVcIiwgXCJcXFxcZ2VcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjVcIiwgXCJcXFxcZ2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkwXCIsIFwiXFxcXGdldHNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIj5cIiwgXCJcXFxcZ3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMDhcIiwgXCJcXFxcaW5cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdWUwMjBcIiwgXCJcXFxcQG5vdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI4MlwiLCBcIlxcXFxzdWJzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyODNcIiwgXCJcXFxcc3Vwc2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjg2XCIsIFwiXFxcXHN1YnNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjg3XCIsIFwiXFxcXHN1cHNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyODhcIiwgXCJcXFxcbnN1YnNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyODlcIiwgXCJcXFxcbnN1cHNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmE4XCIsIFwiXFxcXG1vZGVsc1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5MFwiLCBcIlxcXFxsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjRcIiwgXCJcXFxcbGVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjRcIiwgXCJcXFxcbGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCI8XCIsIFwiXFxcXGx0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkyXCIsIFwiXFxcXHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTJcIiwgXCJcXFxcdG9cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3MVwiLCBcIlxcXFxuZ2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzBcIiwgXCJcXFxcbmxlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzcGFjaW5nLCBcIlxcdTAwYTBcIiwgXCJcXFxcIFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzcGFjaW5nLCBcIlxcdTAwYTBcIiwgXCJcXFxcc3BhY2VcIik7IC8vIFJlZjogTGFUZVggU291cmNlIDJlOiBcXERlY2xhcmVSb2J1c3RDb21tYW5ke1xcbm9icmVha3NwYWNlfXslXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzcGFjaW5nLCBcIlxcdTAwYTBcIiwgXCJcXFxcbm9icmVha3NwYWNlXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHNwYWNpbmcsIFwiXFx1MDBhMFwiLCBcIlxcXFwgXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHNwYWNpbmcsIFwiXFx1MDBhMFwiLCBcIiBcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgc3BhY2luZywgXCJcXHUwMGEwXCIsIFwiXFxcXHNwYWNlXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHNwYWNpbmcsIFwiXFx1MDBhMFwiLCBcIlxcXFxub2JyZWFrc3BhY2VcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3BhY2luZywgbnVsbCwgXCJcXFxcbm9icmVha1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzcGFjaW5nLCBudWxsLCBcIlxcXFxhbGxvd2JyZWFrXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHB1bmN0LCBcIixcIiwgXCIsXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHB1bmN0LCBcIjtcIiwgXCI7XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYmNcIiwgXCJcXFxcYmFyd2VkZ2VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJiYlwiLCBcIlxcXFx2ZWViYXJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTlcIiwgXCJcXFxcb2RvdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5NVwiLCBcIlxcXFxvcGx1c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5N1wiLCBcIlxcXFxvdGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjAyXCIsIFwiXFxcXHBhcnRpYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOThcIiwgXCJcXFxcb3NsYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyOWFcIiwgXCJcXFxcY2lyY2xlZGNpcmNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJhMVwiLCBcIlxcXFxib3hkb3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTI1YjNcIiwgXCJcXFxcYmlndHJpYW5nbGV1cFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjViZFwiLCBcIlxcXFxiaWd0cmlhbmdsZWRvd25cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIwMjBcIiwgXCJcXFxcZGFnZ2VyXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMmM0XCIsIFwiXFxcXGRpYW1vbmRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyYzZcIiwgXCJcXFxcc3RhclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjVjM1wiLCBcIlxcXFx0cmlhbmdsZWxlZnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTI1YjlcIiwgXCJcXFxcdHJpYW5nbGVyaWdodFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIntcIiwgXCJcXFxce1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIntcIiwgXCJcXFxce1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIntcIiwgXCJcXFxcdGV4dGJyYWNlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBjbG9zZSwgXCJ9XCIsIFwiXFxcXH1cIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJ9XCIsIFwiXFxcXH1cIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJ9XCIsIFwiXFxcXHRleHRicmFjZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wZW4sIFwie1wiLCBcIlxcXFxsYnJhY2VcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwifVwiLCBcIlxcXFxyYnJhY2VcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3BlbiwgXCJbXCIsIFwiXFxcXGxicmFja1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIltcIiwgXCJcXFxcbGJyYWNrXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXVwiLCBcIlxcXFxyYnJhY2tcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3BlbiwgXCIoXCIsIFwiXFxcXGxwYXJlblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBjbG9zZSwgXCIpXCIsIFwiXFxcXHJwYXJlblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIjxcIiwgXCJcXFxcdGV4dGxlc3NcIiwgdHJ1ZSk7IC8vIGluIFQxIGZvbnRlbmNcblxuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiPlwiLCBcIlxcXFx0ZXh0Z3JlYXRlclwiLCB0cnVlKTsgLy8gaW4gVDEgZm9udGVuY1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3BlbiwgXCJcXHUyMzBhXCIsIFwiXFxcXGxmbG9vclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBjbG9zZSwgXCJcXHUyMzBiXCIsIFwiXFxcXHJmbG9vclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIlxcdTIzMDhcIiwgXCJcXFxcbGNlaWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiXFx1MjMwOVwiLCBcIlxcXFxyY2VpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcXFxcIiwgXCJcXFxcYmFja3NsYXNoXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyM1wiLCBcInxcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjIzXCIsIFwiXFxcXHZlcnRcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJ8XCIsIFwiXFxcXHRleHRiYXJcIiwgdHJ1ZSk7IC8vIGluIFQxIGZvbnRlbmNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyNVwiLCBcIlxcXFx8XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyNVwiLCBcIlxcXFxWZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyNVwiLCBcIlxcXFx0ZXh0YmFyZGJsXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiflwiLCBcIlxcXFx0ZXh0YXNjaWl0aWxkZVwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcXFxcIiwgXCJcXFxcdGV4dGJhY2tzbGFzaFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIl5cIiwgXCJcXFxcdGV4dGFzY2lpY2lyY3VtXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkxXCIsIFwiXFxcXHVwYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxZDFcIiwgXCJcXFxcVXBhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5M1wiLCBcIlxcXFxkb3duYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxZDNcIiwgXCJcXFxcRG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk1XCIsIFwiXFxcXHVwZG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWQ1XCIsIFwiXFxcXFVwZG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMTBcIiwgXCJcXFxcY29wcm9kXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyYzFcIiwgXCJcXFxcYmlndmVlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyYzBcIiwgXCJcXFxcYmlnd2VkZ2VcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MmEwNFwiLCBcIlxcXFxiaWd1cGx1c1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMmMyXCIsIFwiXFxcXGJpZ2NhcFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMmMzXCIsIFwiXFxcXGJpZ2N1cFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJiXCIsIFwiXFxcXGludFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJiXCIsIFwiXFxcXGludG9wXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMmNcIiwgXCJcXFxcaWludFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJkXCIsIFwiXFxcXGlpaW50XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMGZcIiwgXCJcXFxccHJvZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjExXCIsIFwiXFxcXHN1bVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyYTAyXCIsIFwiXFxcXGJpZ290aW1lc1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyYTAxXCIsIFwiXFxcXGJpZ29wbHVzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTJhMDBcIiwgXCJcXFxcYmlnb2RvdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJlXCIsIFwiXFxcXG9pbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyZlwiLCBcIlxcXFxvaWludFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjMwXCIsIFwiXFxcXG9paWludFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyYTA2XCIsIFwiXFxcXGJpZ3NxY3VwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMmJcIiwgXCJcXFxcc21hbGxpbnRcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgaW5uZXIsIFwiXFx1MjAyNlwiLCBcIlxcXFx0ZXh0ZWxsaXBzaXNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgaW5uZXIsIFwiXFx1MjAyNlwiLCBcIlxcXFxtYXRoZWxsaXBzaXNcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgaW5uZXIsIFwiXFx1MjAyNlwiLCBcIlxcXFxsZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBpbm5lciwgXCJcXHUyMDI2XCIsIFwiXFxcXGxkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGlubmVyLCBcIlxcdTIyZWZcIiwgXCJcXFxcQGNkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGlubmVyLCBcIlxcdTIyZjFcIiwgXCJcXFxcZGRvdHNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMmVlXCIsIFwiXFxcXHZhcnZkb3RzXCIpOyAvLyBcXHZkb3RzIGlzIGEgbWFjcm9cblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmNhXCIsIFwiXFxcXGFjdXRlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmNiXCIsIFwiXFxcXGdyYXZlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMGE4XCIsIFwiXFxcXGRkb3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYWNjZW50LCBcIlxcdTAwN2VcIiwgXCJcXFxcdGlsZGVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyYzlcIiwgXCJcXFxcYmFyXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmQ4XCIsIFwiXFxcXGJyZXZlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmM3XCIsIFwiXFxcXGNoZWNrXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMDVlXCIsIFwiXFxcXGhhdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MjBkN1wiLCBcIlxcXFx2ZWNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyZDlcIiwgXCJcXFxcZG90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmRhXCIsIFwiXFxcXG1hdGhyaW5nXCIpOyAvLyBcXGltYXRoIGFuZCBcXGptYXRoIHNob3VsZCBiZSBpbnZhcmlhbnQgdG8gXFxtYXRocm0sIFxcbWF0aGJmLCBldGMuLCBzbyB1c2UgUFVBXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdWUxMzFcIiwgXCJcXFxcQGltYXRoXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1ZTIzN1wiLCBcIlxcXFxAam1hdGhcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMTMxXCIsIFwiXFx1MDEzMVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAyMzdcIiwgXCJcXHUwMjM3XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDEzMVwiLCBcIlxcXFxpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDIzN1wiLCBcIlxcXFxqXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBkZlwiLCBcIlxcXFxzc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwZTZcIiwgXCJcXFxcYWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMTUzXCIsIFwiXFxcXG9lXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBmOFwiLCBcIlxcXFxvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBjNlwiLCBcIlxcXFxBRVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAxNTJcIiwgXCJcXFxcT0VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGQ4XCIsIFwiXFxcXE9cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyY2FcIiwgXCJcXFxcJ1wiKTsgLy8gYWN1dGVcblxuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMmNiXCIsIFwiXFxcXGBcIik7IC8vIGdyYXZlXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjNlwiLCBcIlxcXFxeXCIpOyAvLyBjaXJjdW1mbGV4XG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJkY1wiLCBcIlxcXFx+XCIpOyAvLyB0aWxkZVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyYzlcIiwgXCJcXFxcPVwiKTsgLy8gbWFjcm9uXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJkOFwiLCBcIlxcXFx1XCIpOyAvLyBicmV2ZVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyZDlcIiwgXCJcXFxcLlwiKTsgLy8gZG90IGFib3ZlXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDBiOFwiLCBcIlxcXFxjXCIpOyAvLyBjZWRpbGxhXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJkYVwiLCBcIlxcXFxyXCIpOyAvLyByaW5nIGFib3ZlXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjN1wiLCBcIlxcXFx2XCIpOyAvLyBjYXJvblxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAwYThcIiwgJ1xcXFxcIicpOyAvLyBkaWFyZXNpc1xuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyZGRcIiwgXCJcXFxcSFwiKTsgLy8gZG91YmxlIGFjdXRlXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MjVlZlwiLCBcIlxcXFx0ZXh0Y2lyY2xlZFwiKTsgLy8gXFxiaWdjaXJjIGdseXBoXG4vLyBUaGVzZSBsaWdhdHVyZXMgYXJlIGRldGVjdGVkIGFuZCBjcmVhdGVkIGluIFBhcnNlci5qcydzIGBmb3JtTGlnYXR1cmVzYC5cblxudmFyIGxpZ2F0dXJlcyA9IHtcbiAgXCItLVwiOiB0cnVlLFxuICBcIi0tLVwiOiB0cnVlLFxuICBcImBgXCI6IHRydWUsXG4gIFwiJydcIjogdHJ1ZVxufTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMTNcIiwgXCItLVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMTNcIiwgXCJcXFxcdGV4dGVuZGFzaFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMTRcIiwgXCItLS1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDE0XCIsIFwiXFxcXHRleHRlbWRhc2hcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDE4XCIsIFwiYFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMThcIiwgXCJcXFxcdGV4dHF1b3RlbGVmdFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMTlcIiwgXCInXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAxOVwiLCBcIlxcXFx0ZXh0cXVvdGVyaWdodFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMWNcIiwgXCJgYFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMWNcIiwgXCJcXFxcdGV4dHF1b3RlZGJsbGVmdFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMWRcIiwgXCInJ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMWRcIiwgXCJcXFxcdGV4dHF1b3RlZGJscmlnaHRcIik7IC8vICBcXGRlZ3JlZSBmcm9tIGdlbnN5bWIgcGFja2FnZVxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGIwXCIsIFwiXFxcXGRlZ3JlZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYjBcIiwgXCJcXFxcZGVncmVlXCIpOyAvLyBcXHRleHRkZWdyZWUgZnJvbSBpbnB1dGVuYyBwYWNrYWdlXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYjBcIiwgXCJcXFxcdGV4dGRlZ3JlZVwiLCB0cnVlKTsgLy8gVE9ETzogSW4gTGFUZVgsIFxccG91bmRzIGNhbiBnZW5lcmF0ZSBhIGRpZmZlcmVudCBjaGFyYWN0ZXIgaW4gdGV4dCBhbmQgbWF0aFxuLy8gbW9kZSwgYnV0IGFtb25nIG91ciBmb250cywgb25seSBNYWluLVJlZ3VsYXIgZGVmaW5lcyB0aGlzIGNoYXJhY3RlciBcIjE2M1wiLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGEzXCIsIFwiXFxcXHBvdW5kc1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYTNcIiwgXCJcXFxcbWF0aHN0ZXJsaW5nXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhM1wiLCBcIlxcXFxwb3VuZHNcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGEzXCIsIFwiXFxcXHRleHRzdGVybGluZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjcyMFwiLCBcIlxcXFxtYWx0ZXNlXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJcXHUyNzIwXCIsIFwiXFxcXG1hbHRlc2VcIik7IC8vIFRoZXJlIGFyZSBsb3RzIG9mIHN5bWJvbHMgd2hpY2ggYXJlIHRoZSBzYW1lLCBzbyB3ZSBhZGQgdGhlbSBpbiBhZnRlcndhcmRzLlxuLy8gQWxsIG9mIHRoZXNlIGFyZSB0ZXh0b3JkcyBpbiBtYXRoIG1vZGVcblxudmFyIG1hdGhUZXh0U3ltYm9scyA9IFwiMDEyMzQ1Njc4OS9ALlxcXCJcIjtcblxuZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRoVGV4dFN5bWJvbHMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIGNoID0gbWF0aFRleHRTeW1ib2xzLmNoYXJBdChpKTtcbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIGNoLCBjaCk7XG59IC8vIEFsbCBvZiB0aGVzZSBhcmUgdGV4dG9yZHMgaW4gdGV4dCBtb2RlXG5cblxudmFyIHRleHRTeW1ib2xzID0gXCIwMTIzNDU2Nzg5IUAqKCktPStcXFwiOzo/Ly4sXCI7XG5cbmZvciAodmFyIF9pID0gMDsgX2kgPCB0ZXh0U3ltYm9scy5sZW5ndGg7IF9pKyspIHtcbiAgdmFyIF9jaCA9IHRleHRTeW1ib2xzLmNoYXJBdChfaSk7XG5cbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaCwgX2NoKTtcbn0gLy8gQWxsIG9mIHRoZXNlIGFyZSB0ZXh0b3JkcyBpbiB0ZXh0IG1vZGUsIGFuZCBtYXRob3JkcyBpbiBtYXRoIG1vZGVcblxuXG52YXIgbGV0dGVycyA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiO1xuXG5mb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBsZXR0ZXJzLmxlbmd0aDsgX2kyKyspIHtcbiAgdmFyIF9jaDIgPSBsZXR0ZXJzLmNoYXJBdChfaTIpO1xuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gyLCBfY2gyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDIsIF9jaDIpO1xufSAvLyBCbGFja2JvYXJkIGJvbGQgYW5kIHNjcmlwdCBsZXR0ZXJzIGluIFVuaWNvZGUgcmFuZ2VcblxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIkNcIiwgXCJcXHUyMTAyXCIpOyAvLyBibGFja2JvYXJkIGJvbGRcblxuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJDXCIsIFwiXFx1MjEwMlwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiSFwiLCBcIlxcdTIxMERcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgYW1zLCB0ZXh0b3JkLCBcIkhcIiwgXCJcXHUyMTBEXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJOXCIsIFwiXFx1MjExNVwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiTlwiLCBcIlxcdTIxMTVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlBcIiwgXCJcXHUyMTE5XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJQXCIsIFwiXFx1MjExOVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiUVwiLCBcIlxcdTIxMUFcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgYW1zLCB0ZXh0b3JkLCBcIlFcIiwgXCJcXHUyMTFBXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJSXCIsIFwiXFx1MjExRFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiUlwiLCBcIlxcdTIxMURcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlpcIiwgXCJcXHUyMTI0XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJaXCIsIFwiXFx1MjEyNFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcImhcIiwgXCJcXHUyMTBFXCIpOyAvLyBpdGFsaWMgaCwgUGxhbmNrIGNvbnN0YW50XG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBtYXRob3JkLCBcImhcIiwgXCJcXHUyMTBFXCIpOyAvLyBUaGUgbmV4dCBsb29wIGxvYWRzIHdpZGUgKHN1cnJvZ2F0ZSBwYWlyKSBjaGFyYWN0ZXJzLlxuLy8gV2Ugc3VwcG9ydCBzb21lIGxldHRlcnMgaW4gdGhlIFVuaWNvZGUgcmFuZ2UgVSsxRDQwMCB0byBVKzFEN0ZGLFxuLy8gTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzLlxuLy8gU29tZSBlZGl0b3JzIGRvIG5vdCBkZWFsIHdlbGwgd2l0aCB3aWRlIGNoYXJhY3RlcnMuIFNvIGRvbid0IHdyaXRlIHRoZVxuLy8gc3RyaW5nIGludG8gdGhpcyBmaWxlLiBJbnN0ZWFkLCBjcmVhdGUgdGhlIHN0cmluZyBmcm9tIHRoZSBzdXJyb2dhdGUgcGFpci5cblxudmFyIHdpZGVDaGFyID0gXCJcIjtcblxuZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgbGV0dGVycy5sZW5ndGg7IF9pMysrKSB7XG4gIHZhciBfY2gzID0gbGV0dGVycy5jaGFyQXQoX2kzKTsgLy8gVGhlIGhleCBudW1iZXJzIGluIHRoZSBuZXh0IGxpbmUgYXJlIGEgc3Vycm9nYXRlIHBhaXIuXG4gIC8vIDB4RDgzNSBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgZm9yIGFsbCBsZXR0ZXJzIGluIHRoZSByYW5nZSB3ZSBzdXBwb3J0LlxuICAvLyAweERDMDAgaXMgdGhlIGxvdyBzdXJyb2dhdGUgZm9yIGJvbGQgQS5cblxuXG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REMwMCArIF9pMyk7IC8vIEEtWiBhLXogYm9sZFxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REMzNCArIF9pMyk7IC8vIEEtWiBhLXogaXRhbGljXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzY4ICsgX2kzKTsgLy8gQS1aIGEteiBib2xkIGl0YWxpY1xuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REQwNCArIF9pMyk7IC8vIEEtWiBhLXogRnJhY3R1clxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4RERBMCArIF9pMyk7IC8vIEEtWiBhLXogc2Fucy1zZXJpZlxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4RERENCArIF9pMyk7IC8vIEEtWiBhLXogc2FucyBib2xkXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERTA4ICsgX2kzKTsgLy8gQS1aIGEteiBzYW5zIGl0YWxpY1xuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REU3MCArIF9pMyk7IC8vIEEtWiBhLXogbW9ub3NwYWNlXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDMsIHdpZGVDaGFyKTtcblxuICBpZiAoX2kzIDwgMjYpIHtcbiAgICAvLyBLYVRlWCBmb250cyBoYXZlIG9ubHkgY2FwaXRhbCBsZXR0ZXJzIGZvciBibGFja2JvYXJkIGJvbGQgYW5kIHNjcmlwdC5cbiAgICAvLyBTZWUgZXhjZXB0aW9uIGZvciBrIGJlbG93LlxuICAgIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REQzOCArIF9pMyk7IC8vIEEtWiBkb3VibGUgc3RydWNrXG5cbiAgICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICAgIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gICAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzlDICsgX2kzKTsgLy8gQS1aIHNjcmlwdFxuXG4gICAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICB9IC8vIFRPRE86IEFkZCBib2xkIHNjcmlwdCB3aGVuIGl0IGlzIHN1cHBvcnRlZCBieSBhIEthVGVYIGZvbnQuXG5cbn0gLy8gXCJrXCIgaXMgdGhlIG9ubHkgZG91YmxlIHN0cnVjayBsb3dlciBjYXNlIGxldHRlciBpbiB0aGUgS2FUZVggZm9udHMuXG5cblxud2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERDVDKTsgLy8gayBkb3VibGUgc3RydWNrXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcImtcIiwgd2lkZUNoYXIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwia1wiLCB3aWRlQ2hhcik7IC8vIE5leHQsIHNvbWUgd2lkZSBjaGFyYWN0ZXIgbnVtZXJhbHNcblxuZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgMTA7IF9pNCsrKSB7XG4gIHZhciBfY2g0ID0gX2k0LnRvU3RyaW5nKCk7XG5cbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERkNFICsgX2k0KTsgLy8gMC05IGJvbGRcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERGRTIgKyBfaTQpOyAvLyAwLTkgc2FucyBzZXJpZlxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2g0LCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2g0LCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZFQyArIF9pNCk7IC8vIDAtOSBib2xkIHNhbnNcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERGRjYgKyBfaTQpOyAvLyAwLTkgbW9ub3NwYWNlXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDQsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDQsIHdpZGVDaGFyKTtcbn0gLy8gV2UgYWRkIHRoZXNlIExhdGluLTEgbGV0dGVycyBhcyBzeW1ib2xzIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSxcbi8vIGJ1dCB0aGV5IGFyZSBub3QgYWN0dWFsbHkgaW4gdGhlIGZvbnQsIG5vciBhcmUgdGhleSBzdXBwb3J0ZWQgYnkgdGhlXG4vLyBVbmljb2RlIGFjY2VudCBtZWNoYW5pc20sIHNvIHRoZXkgZmFsbCBiYWNrIHRvIFRpbWVzIGZvbnQgYW5kIGxvb2sgdWdseS5cbi8vIFRPRE8oZWRlbWFpbmUpOiBGaXggdGhpcy5cblxuXG52YXIgZXh0cmFMYXRpbiA9IFwiXFx1MDBkMFxcdTAwZGVcXHUwMGZlXCI7XG5cbmZvciAodmFyIF9pNSA9IDA7IF9pNSA8IGV4dHJhTGF0aW4ubGVuZ3RoOyBfaTUrKykge1xuICB2YXIgX2NoNSA9IGV4dHJhTGF0aW4uY2hhckF0KF9pNSk7XG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDUsIF9jaDUpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoNSwgX2NoNSk7XG59XG5cbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFVuaWNvZGUgcmFuZ2UgVSsxRDQwMCB0byBVKzFEN0ZGLFxuICogTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzLlxuICpcbiAqIEZ1bmN0aW9uIHdpZGVDaGFyYWN0ZXJGb250IHRha2VzIGEgd2lkZSBjaGFyYWN0ZXIgYXMgaW5wdXQgYW5kIHJldHVybnNcbiAqIHRoZSBmb250IGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byByZW5kZXIgaXQgcHJvcGVybHkuXG4gKi9cbi8qKlxuICogRGF0YSBiZWxvdyBpcyBmcm9tIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9QREYvVTFENDAwLnBkZlxuICogVGhhdCBkb2N1bWVudCBzb3J0cyBjaGFyYWN0ZXJzIGludG8gZ3JvdXBzIGJ5IGZvbnQgdHlwZSwgc2F5IGJvbGQgb3IgaXRhbGljLlxuICpcbiAqIEluIHRoZSBhcnJheXMgYmVsb3csIGVhY2ggc3ViYXJyYXkgY29uc2lzdHMgdGhyZWUgZWxlbWVudHM6XG4gKiAgICAgICogVGhlIENTUyBjbGFzcyBvZiB0aGF0IGdyb3VwIHdoZW4gaW4gbWF0aCBtb2RlLlxuICogICAgICAqIFRoZSBDU1MgY2xhc3Mgb2YgdGhhdCBncm91cCB3aGVuIGluIHRleHQgbW9kZS5cbiAqICAgICAgKiBUaGUgZm9udCBuYW1lLCBzbyB0aGF0IEthVGVYIGNhbiBnZXQgZm9udCBtZXRyaWNzLlxuICovXG5cbnZhciB3aWRlTGF0aW5MZXR0ZXJEYXRhID0gW1tcIm1hdGhiZlwiLCBcInRleHRiZlwiLCBcIk1haW4tQm9sZFwiXSwgLy8gQS1aIGJvbGQgdXByaWdodFxuW1wibWF0aGJmXCIsIFwidGV4dGJmXCIsIFwiTWFpbi1Cb2xkXCJdLCAvLyBhLXogYm9sZCB1cHJpZ2h0XG5bXCJtYXRobm9ybWFsXCIsIFwidGV4dGl0XCIsIFwiTWF0aC1JdGFsaWNcIl0sIC8vIEEtWiBpdGFsaWNcbltcIm1hdGhub3JtYWxcIiwgXCJ0ZXh0aXRcIiwgXCJNYXRoLUl0YWxpY1wiXSwgLy8gYS16IGl0YWxpY1xuW1wiYm9sZHN5bWJvbFwiLCBcImJvbGRzeW1ib2xcIiwgXCJNYWluLUJvbGRJdGFsaWNcIl0sIC8vIEEtWiBib2xkIGl0YWxpY1xuW1wiYm9sZHN5bWJvbFwiLCBcImJvbGRzeW1ib2xcIiwgXCJNYWluLUJvbGRJdGFsaWNcIl0sIC8vIGEteiBib2xkIGl0YWxpY1xuLy8gTWFwIGZhbmN5IEEtWiBsZXR0ZXJzIHRvIHNjcmlwdCwgbm90IGNhbGxpZ3JhcGhpYy5cbi8vIFRoaXMgYWxpZ25zIHdpdGggdW5pY29kZS1tYXRoIGFuZCBtYXRoIGZvbnRzIChleGNlcHQgQ2FtYnJpYSBNYXRoKS5cbltcIm1hdGhzY3JcIiwgXCJ0ZXh0c2NyXCIsIFwiU2NyaXB0LVJlZ3VsYXJcIl0sIC8vIEEtWiBzY3JpcHRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gYS16IHNjcmlwdC4gIE5vIGZvbnRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gQS1aIGJvbGQgc2NyaXB0LiBObyBmb250XG5bXCJcIiwgXCJcIiwgXCJcIl0sIC8vIGEteiBib2xkIHNjcmlwdC4gTm8gZm9udFxuW1wibWF0aGZyYWtcIiwgXCJ0ZXh0ZnJha1wiLCBcIkZyYWt0dXItUmVndWxhclwiXSwgLy8gQS1aIEZyYWt0dXJcbltcIm1hdGhmcmFrXCIsIFwidGV4dGZyYWtcIiwgXCJGcmFrdHVyLVJlZ3VsYXJcIl0sIC8vIGEteiBGcmFrdHVyXG5bXCJtYXRoYmJcIiwgXCJ0ZXh0YmJcIiwgXCJBTVMtUmVndWxhclwiXSwgLy8gQS1aIGRvdWJsZS1zdHJ1Y2tcbltcIm1hdGhiYlwiLCBcInRleHRiYlwiLCBcIkFNUy1SZWd1bGFyXCJdLCAvLyBrIGRvdWJsZS1zdHJ1Y2tcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gQS1aIGJvbGQgRnJha3R1ciBObyBmb250IG1ldHJpY3NcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gYS16IGJvbGQgRnJha3R1ci4gICBObyBmb250LlxuW1wibWF0aHNmXCIsIFwidGV4dHNmXCIsIFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIl0sIC8vIEEtWiBzYW5zLXNlcmlmXG5bXCJtYXRoc2ZcIiwgXCJ0ZXh0c2ZcIiwgXCJTYW5zU2VyaWYtUmVndWxhclwiXSwgLy8gYS16IHNhbnMtc2VyaWZcbltcIm1hdGhib2xkc2ZcIiwgXCJ0ZXh0Ym9sZHNmXCIsIFwiU2Fuc1NlcmlmLUJvbGRcIl0sIC8vIEEtWiBib2xkIHNhbnMtc2VyaWZcbltcIm1hdGhib2xkc2ZcIiwgXCJ0ZXh0Ym9sZHNmXCIsIFwiU2Fuc1NlcmlmLUJvbGRcIl0sIC8vIGEteiBib2xkIHNhbnMtc2VyaWZcbltcIm1hdGhpdHNmXCIsIFwidGV4dGl0c2ZcIiwgXCJTYW5zU2VyaWYtSXRhbGljXCJdLCAvLyBBLVogaXRhbGljIHNhbnMtc2VyaWZcbltcIm1hdGhpdHNmXCIsIFwidGV4dGl0c2ZcIiwgXCJTYW5zU2VyaWYtSXRhbGljXCJdLCAvLyBhLXogaXRhbGljIHNhbnMtc2VyaWZcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gQS1aIGJvbGQgaXRhbGljIHNhbnMuIE5vIGZvbnRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gYS16IGJvbGQgaXRhbGljIHNhbnMuIE5vIGZvbnRcbltcIm1hdGh0dFwiLCBcInRleHR0dFwiLCBcIlR5cGV3cml0ZXItUmVndWxhclwiXSwgLy8gQS1aIG1vbm9zcGFjZVxuW1wibWF0aHR0XCIsIFwidGV4dHR0XCIsIFwiVHlwZXdyaXRlci1SZWd1bGFyXCJdIC8vIGEteiBtb25vc3BhY2Vcbl07XG52YXIgd2lkZU51bWVyYWxEYXRhID0gW1tcIm1hdGhiZlwiLCBcInRleHRiZlwiLCBcIk1haW4tQm9sZFwiXSwgLy8gMC05IGJvbGRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gMC05IGRvdWJsZS1zdHJ1Y2suIE5vIEthVGVYIGZvbnQuXG5bXCJtYXRoc2ZcIiwgXCJ0ZXh0c2ZcIiwgXCJTYW5zU2VyaWYtUmVndWxhclwiXSwgLy8gMC05IHNhbnMtc2VyaWZcbltcIm1hdGhib2xkc2ZcIiwgXCJ0ZXh0Ym9sZHNmXCIsIFwiU2Fuc1NlcmlmLUJvbGRcIl0sIC8vIDAtOSBib2xkIHNhbnMtc2VyaWZcbltcIm1hdGh0dFwiLCBcInRleHR0dFwiLCBcIlR5cGV3cml0ZXItUmVndWxhclwiXSAvLyAwLTkgbW9ub3NwYWNlXG5dO1xudmFyIHdpZGVDaGFyYWN0ZXJGb250ID0gZnVuY3Rpb24gd2lkZUNoYXJhY3RlckZvbnQod2lkZUNoYXIsIG1vZGUpIHtcbiAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGNvZGVQb2ludEF0KCkuIFNvIHdvcmsgd2l0aCB0aGUgc3Vycm9nYXRlIHBhaXIuXG4gIHZhciBIID0gd2lkZUNoYXIuY2hhckNvZGVBdCgwKTsgLy8gaGlnaCBzdXJyb2dhdGVcblxuICB2YXIgTCA9IHdpZGVDaGFyLmNoYXJDb2RlQXQoMSk7IC8vIGxvdyBzdXJyb2dhdGVcblxuICB2YXIgY29kZVBvaW50ID0gKEggLSAweEQ4MDApICogMHg0MDAgKyAoTCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB2YXIgaiA9IG1vZGUgPT09IFwibWF0aFwiID8gMCA6IDE7IC8vIGNvbHVtbiBpbmRleCBmb3IgQ1NTIGNsYXNzLlxuXG4gIGlmICgweDFENDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPCAweDFENkE0KSB7XG4gICAgLy8gd2lkZUxhdGluTGV0dGVyRGF0YSBjb250YWlucyBleGFjdGx5IDI2IGNoYXJzIG9uIGVhY2ggcm93LlxuICAgIC8vIFNvIHdlIGNhbiBjYWxjdWxhdGUgdGhlIHJlbGV2YW50IHJvdy4gTm8gdHJhdmVyc2UgbmVjZXNzYXJ5LlxuICAgIHZhciBpID0gTWF0aC5mbG9vcigoY29kZVBvaW50IC0gMHgxRDQwMCkgLyAyNik7XG4gICAgcmV0dXJuIFt3aWRlTGF0aW5MZXR0ZXJEYXRhW2ldWzJdLCB3aWRlTGF0aW5MZXR0ZXJEYXRhW2ldW2pdXTtcbiAgfSBlbHNlIGlmICgweDFEN0NFIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRDdGRikge1xuICAgIC8vIE51bWVyYWxzLCB0ZW4gcGVyIHJvdy5cbiAgICB2YXIgX2kgPSBNYXRoLmZsb29yKChjb2RlUG9pbnQgLSAweDFEN0NFKSAvIDEwKTtcblxuICAgIHJldHVybiBbd2lkZU51bWVyYWxEYXRhW19pXVsyXSwgd2lkZU51bWVyYWxEYXRhW19pXVtqXV07XG4gIH0gZWxzZSBpZiAoY29kZVBvaW50ID09PSAweDFENkE1IHx8IGNvZGVQb2ludCA9PT0gMHgxRDZBNikge1xuICAgIC8vIGRvdGxlc3MgaSBvciBqXG4gICAgcmV0dXJuIFt3aWRlTGF0aW5MZXR0ZXJEYXRhWzBdWzJdLCB3aWRlTGF0aW5MZXR0ZXJEYXRhWzBdW2pdXTtcbiAgfSBlbHNlIGlmICgweDFENkE2IDwgY29kZVBvaW50ICYmIGNvZGVQb2ludCA8IDB4MUQ3Q0UpIHtcbiAgICAvLyBHcmVlayBsZXR0ZXJzLiBOb3Qgc3VwcG9ydGVkLCB5ZXQuXG4gICAgcmV0dXJuIFtcIlwiLCBcIlwiXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGFueSB3aWRlIGNoYXJhY3RlcnMgb3V0c2lkZSAxRDQwMOKAkzFEN0ZGLlxuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5zdXBwb3J0ZWQgY2hhcmFjdGVyOiBcIiArIHdpZGVDaGFyKTtcbiAgfVxufTtcblxuLyogZXNsaW50IG5vLWNvbnNvbGU6MCAqL1xuXG4vKipcbiAqIExvb2tzIHVwIHRoZSBnaXZlbiBzeW1ib2wgaW4gZm9udE1ldHJpY3MsIGFmdGVyIGFwcGx5aW5nIGFueSBzeW1ib2xcbiAqIHJlcGxhY2VtZW50cyBkZWZpbmVkIGluIHN5bWJvbC5qc1xuICovXG52YXIgbG9va3VwU3ltYm9sID0gZnVuY3Rpb24gbG9va3VwU3ltYm9sKHZhbHVlLCAvLyBUT0RPKCM5NjMpOiBVc2UgYSB1bmlvbiB0eXBlIGZvciB0aGlzLlxuZm9udE5hbWUsIG1vZGUpIHtcbiAgLy8gUmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBpdHMgcmVwbGFjZWQgdmFsdWUgZnJvbSBzeW1ib2wuanNcbiAgaWYgKHN5bWJvbHNbbW9kZV1bdmFsdWVdICYmIHN5bWJvbHNbbW9kZV1bdmFsdWVdLnJlcGxhY2UpIHtcbiAgICB2YWx1ZSA9IHN5bWJvbHNbbW9kZV1bdmFsdWVdLnJlcGxhY2U7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBtZXRyaWNzOiBnZXRDaGFyYWN0ZXJNZXRyaWNzKHZhbHVlLCBmb250TmFtZSwgbW9kZSlcbiAgfTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3ltYm9sTm9kZSBhZnRlciB0cmFuc2xhdGlvbiB2aWEgdGhlIGxpc3Qgb2Ygc3ltYm9scyBpbiBzeW1ib2xzLmpzLlxuICogQ29ycmVjdGx5IHB1bGxzIG91dCBtZXRyaWNzIGZvciB0aGUgY2hhcmFjdGVyLCBhbmQgb3B0aW9uYWxseSB0YWtlcyBhIGxpc3Qgb2ZcbiAqIGNsYXNzZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIG5vZGUuXG4gKlxuICogVE9ETzogbWFrZSBhcmd1bWVudCBvcmRlciBjbG9zZXIgdG8gbWFrZVNwYW5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKiBUT0RPKCM5NTMpOiBNYWtlIGBvcHRpb25zYCBtYW5kYXRvcnkgYW5kIGFsd2F5cyBwYXNzIGl0IGluLlxuICovXG5cblxudmFyIG1ha2VTeW1ib2wgPSBmdW5jdGlvbiBtYWtlU3ltYm9sKHZhbHVlLCBmb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcykge1xuICB2YXIgbG9va3VwID0gbG9va3VwU3ltYm9sKHZhbHVlLCBmb250TmFtZSwgbW9kZSk7XG4gIHZhciBtZXRyaWNzID0gbG9va3VwLm1ldHJpY3M7XG4gIHZhbHVlID0gbG9va3VwLnZhbHVlO1xuICB2YXIgc3ltYm9sTm9kZTtcblxuICBpZiAobWV0cmljcykge1xuICAgIHZhciBpdGFsaWMgPSBtZXRyaWNzLml0YWxpYztcblxuICAgIGlmIChtb2RlID09PSBcInRleHRcIiB8fCBvcHRpb25zICYmIG9wdGlvbnMuZm9udCA9PT0gXCJtYXRoaXRcIikge1xuICAgICAgaXRhbGljID0gMDtcbiAgICB9XG5cbiAgICBzeW1ib2xOb2RlID0gbmV3IFN5bWJvbE5vZGUodmFsdWUsIG1ldHJpY3MuaGVpZ2h0LCBtZXRyaWNzLmRlcHRoLCBpdGFsaWMsIG1ldHJpY3Muc2tldywgbWV0cmljcy53aWR0aCwgY2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVE9ETyhlbWlseSk6IEZpZ3VyZSBvdXQgYSBnb29kIHdheSB0byBvbmx5IHByaW50IHRoaXMgaW4gZGV2ZWxvcG1lbnRcbiAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlLndhcm4oXCJObyBjaGFyYWN0ZXIgbWV0cmljcyBcIiArIChcImZvciAnXCIgKyB2YWx1ZSArIFwiJyBpbiBzdHlsZSAnXCIgKyBmb250TmFtZSArIFwiJyBhbmQgbW9kZSAnXCIgKyBtb2RlICsgXCInXCIpKTtcbiAgICBzeW1ib2xOb2RlID0gbmV3IFN5bWJvbE5vZGUodmFsdWUsIDAsIDAsIDAsIDAsIDAsIGNsYXNzZXMpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBzeW1ib2xOb2RlLm1heEZvbnRTaXplID0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcblxuICAgIGlmIChvcHRpb25zLnN0eWxlLmlzVGlnaHQoKSkge1xuICAgICAgc3ltYm9sTm9kZS5jbGFzc2VzLnB1c2goXCJtdGlnaHRcIik7XG4gICAgfVxuXG4gICAgdmFyIGNvbG9yID0gb3B0aW9ucy5nZXRDb2xvcigpO1xuXG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICBzeW1ib2xOb2RlLnN0eWxlLmNvbG9yID0gY29sb3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bWJvbE5vZGU7XG59O1xuLyoqXG4gKiBNYWtlcyBhIHN5bWJvbCBpbiBNYWluLVJlZ3VsYXIgb3IgQU1TLVJlZ3VsYXIuXG4gKiBVc2VkIGZvciByZWwsIGJpbiwgb3BlbiwgY2xvc2UsIGlubmVyLCBhbmQgcHVuY3QuXG4gKi9cblxuXG52YXIgbWF0aHN5bSA9IGZ1bmN0aW9uIG1hdGhzeW0odmFsdWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMpIHtcbiAgaWYgKGNsYXNzZXMgPT09IHZvaWQgMCkge1xuICAgIGNsYXNzZXMgPSBbXTtcbiAgfVxuXG4gIC8vIERlY2lkZSB3aGF0IGZvbnQgdG8gcmVuZGVyIHRoZSBzeW1ib2wgaW4gYnkgaXRzIGVudHJ5IGluIHRoZSBzeW1ib2xzXG4gIC8vIHRhYmxlLlxuICAvLyBIYXZlIGEgc3BlY2lhbCBjYXNlIGZvciB3aGVuIHRoZSB2YWx1ZSA9IFxcIGJlY2F1c2UgdGhlIFxcIGlzIHVzZWQgYXMgYVxuICAvLyB0ZXh0b3JkIGluIHVuc3VwcG9ydGVkIGNvbW1hbmQgZXJyb3JzIGJ1dCBjYW5ub3QgYmUgcGFyc2VkIGFzIGEgcmVndWxhclxuICAvLyB0ZXh0IG9yZGluYWwgYW5kIGlzIHRoZXJlZm9yZSBub3QgcHJlc2VudCBhcyBhIHN5bWJvbCBpbiB0aGUgc3ltYm9sc1xuICAvLyB0YWJsZSBmb3IgdGV4dCwgYXMgd2VsbCBhcyBhIHNwZWNpYWwgY2FzZSBmb3IgYm9sZHN5bWJvbCBiZWNhdXNlIGl0XG4gIC8vIGNhbiBiZSB1c2VkIGZvciBib2xkICsgYW5kIC1cbiAgaWYgKG9wdGlvbnMuZm9udCA9PT0gXCJib2xkc3ltYm9sXCIgJiYgbG9va3VwU3ltYm9sKHZhbHVlLCBcIk1haW4tQm9sZFwiLCBtb2RlKS5tZXRyaWNzKSB7XG4gICAgcmV0dXJuIG1ha2VTeW1ib2wodmFsdWUsIFwiTWFpbi1Cb2xkXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KFtcIm1hdGhiZlwiXSkpO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlxcXFxcIiB8fCBzeW1ib2xzW21vZGVdW3ZhbHVlXS5mb250ID09PSBcIm1haW5cIikge1xuICAgIHJldHVybiBtYWtlU3ltYm9sKHZhbHVlLCBcIk1haW4tUmVndWxhclwiLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbWFrZVN5bWJvbCh2YWx1ZSwgXCJBTVMtUmVndWxhclwiLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbXCJhbXNybVwiXSkpO1xuICB9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSB0d28gZm9udCBuYW1lcyAoTWFpbi1Cb2xkIGFuZCBNYXRoLUJvbGRJdGFsaWMpIGFuZFxuICogY29ycmVzcG9uZGluZyBzdHlsZSB0YWdzIChtYXRoYmYgb3IgYm9sZHN5bWJvbCkgdG8gdXNlIGZvciBmb250IFwiYm9sZHN5bWJvbFwiLFxuICogZGVwZW5kaW5nIG9uIHRoZSBzeW1ib2wuICBVc2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGZvbnRNYXAgZm9yIGZvbnRcbiAqIFwiYm9sZHN5bWJvbFwiLlxuICovXG5cblxudmFyIGJvbGRzeW1ib2wgPSBmdW5jdGlvbiBib2xkc3ltYm9sKHZhbHVlLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLCB0eXBlKSB7XG4gIGlmICh0eXBlICE9PSBcInRleHRvcmRcIiAmJiBsb29rdXBTeW1ib2wodmFsdWUsIFwiTWF0aC1Cb2xkSXRhbGljXCIsIG1vZGUpLm1ldHJpY3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9udE5hbWU6IFwiTWF0aC1Cb2xkSXRhbGljXCIsXG4gICAgICBmb250Q2xhc3M6IFwiYm9sZHN5bWJvbFwiXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTb21lIGdseXBocyBkbyBub3QgZXhpc3QgaW4gTWF0aC1Cb2xkSXRhbGljIHNvIHdlIG5lZWQgdG8gdXNlXG4gICAgLy8gTWFpbi1Cb2xkIGluc3RlYWQuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1haW4tQm9sZFwiLFxuICAgICAgZm9udENsYXNzOiBcIm1hdGhiZlwiXG4gICAgfTtcbiAgfVxufTtcbi8qKlxuICogTWFrZXMgZWl0aGVyIGEgbWF0aG9yZCBvciB0ZXh0b3JkIGluIHRoZSBjb3JyZWN0IGZvbnQgYW5kIGNvbG9yLlxuICovXG5cblxudmFyIG1ha2VPcmQgPSBmdW5jdGlvbiBtYWtlT3JkKGdyb3VwLCBvcHRpb25zLCB0eXBlKSB7XG4gIHZhciBtb2RlID0gZ3JvdXAubW9kZTtcbiAgdmFyIHRleHQgPSBncm91cC50ZXh0O1xuICB2YXIgY2xhc3NlcyA9IFtcIm1vcmRcIl07IC8vIE1hdGggbW9kZSBvciBPbGQgZm9udCAoaS5lLiBcXHJtKVxuXG4gIHZhciBpc0ZvbnQgPSBtb2RlID09PSBcIm1hdGhcIiB8fCBtb2RlID09PSBcInRleHRcIiAmJiBvcHRpb25zLmZvbnQ7XG4gIHZhciBmb250T3JGYW1pbHkgPSBpc0ZvbnQgPyBvcHRpb25zLmZvbnQgOiBvcHRpb25zLmZvbnRGYW1pbHk7XG5cbiAgaWYgKHRleHQuY2hhckNvZGVBdCgwKSA9PT0gMHhEODM1KSB7XG4gICAgLy8gc3Vycm9nYXRlIHBhaXJzIGdldCBzcGVjaWFsIHRyZWF0bWVudFxuICAgIHZhciBbd2lkZUZvbnROYW1lLCB3aWRlRm9udENsYXNzXSA9IHdpZGVDaGFyYWN0ZXJGb250KHRleHQsIG1vZGUpO1xuICAgIHJldHVybiBtYWtlU3ltYm9sKHRleHQsIHdpZGVGb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQod2lkZUZvbnRDbGFzcykpO1xuICB9IGVsc2UgaWYgKGZvbnRPckZhbWlseSkge1xuICAgIHZhciBmb250TmFtZTtcbiAgICB2YXIgZm9udENsYXNzZXM7XG5cbiAgICBpZiAoZm9udE9yRmFtaWx5ID09PSBcImJvbGRzeW1ib2xcIikge1xuICAgICAgdmFyIGZvbnREYXRhID0gYm9sZHN5bWJvbCh0ZXh0LCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLCB0eXBlKTtcbiAgICAgIGZvbnROYW1lID0gZm9udERhdGEuZm9udE5hbWU7XG4gICAgICBmb250Q2xhc3NlcyA9IFtmb250RGF0YS5mb250Q2xhc3NdO1xuICAgIH0gZWxzZSBpZiAoaXNGb250KSB7XG4gICAgICBmb250TmFtZSA9IGZvbnRNYXBbZm9udE9yRmFtaWx5XS5mb250TmFtZTtcbiAgICAgIGZvbnRDbGFzc2VzID0gW2ZvbnRPckZhbWlseV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvbnROYW1lID0gcmV0cmlldmVUZXh0Rm9udE5hbWUoZm9udE9yRmFtaWx5LCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTtcbiAgICAgIGZvbnRDbGFzc2VzID0gW2ZvbnRPckZhbWlseSwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZV07XG4gICAgfVxuXG4gICAgaWYgKGxvb2t1cFN5bWJvbCh0ZXh0LCBmb250TmFtZSwgbW9kZSkubWV0cmljcykge1xuICAgICAgcmV0dXJuIG1ha2VTeW1ib2wodGV4dCwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KGZvbnRDbGFzc2VzKSk7XG4gICAgfSBlbHNlIGlmIChsaWdhdHVyZXMuaGFzT3duUHJvcGVydHkodGV4dCkgJiYgZm9udE5hbWUuc2xpY2UoMCwgMTApID09PSBcIlR5cGV3cml0ZXJcIikge1xuICAgICAgLy8gRGVjb25zdHJ1Y3QgbGlnYXR1cmVzIGluIG1vbm9zcGFjZSBmb250cyAoXFx0ZXh0dHQsIFxcdHQpLlxuICAgICAgdmFyIHBhcnRzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBwYXJ0cy5wdXNoKG1ha2VTeW1ib2wodGV4dFtpXSwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KGZvbnRDbGFzc2VzKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFrZUZyYWdtZW50KHBhcnRzKTtcbiAgICB9XG4gIH0gLy8gTWFrZXMgYSBzeW1ib2wgaW4gdGhlIGRlZmF1bHQgZm9udCBmb3IgbWF0aG9yZHMgYW5kIHRleHRvcmRzLlxuXG5cbiAgaWYgKHR5cGUgPT09IFwibWF0aG9yZFwiKSB7XG4gICAgcmV0dXJuIG1ha2VTeW1ib2wodGV4dCwgXCJNYXRoLUl0YWxpY1wiLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbXCJtYXRobm9ybWFsXCJdKSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0ZXh0b3JkXCIpIHtcbiAgICB2YXIgZm9udCA9IHN5bWJvbHNbbW9kZV1bdGV4dF0gJiYgc3ltYm9sc1ttb2RlXVt0ZXh0XS5mb250O1xuXG4gICAgaWYgKGZvbnQgPT09IFwiYW1zXCIpIHtcbiAgICAgIHZhciBfZm9udE5hbWUgPSByZXRyaWV2ZVRleHRGb250TmFtZShcImFtc3JtXCIsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpO1xuXG4gICAgICByZXR1cm4gbWFrZVN5bWJvbCh0ZXh0LCBfZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KFwiYW1zcm1cIiwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSkpO1xuICAgIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJtYWluXCIgfHwgIWZvbnQpIHtcbiAgICAgIHZhciBfZm9udE5hbWUyID0gcmV0cmlldmVUZXh0Rm9udE5hbWUoXCJ0ZXh0cm1cIiwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSk7XG5cbiAgICAgIHJldHVybiBtYWtlU3ltYm9sKHRleHQsIF9mb250TmFtZTIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9udHMgYWRkZWQgYnkgcGx1Z2luc1xuICAgICAgdmFyIF9mb250TmFtZTMgPSByZXRyaWV2ZVRleHRGb250TmFtZShmb250LCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTsgLy8gV2UgYWRkIGZvbnQgbmFtZSBhcyBhIGNzcyBjbGFzc1xuXG5cbiAgICAgIHJldHVybiBtYWtlU3ltYm9sKHRleHQsIF9mb250TmFtZTMsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KF9mb250TmFtZTMsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidW5leHBlY3RlZCB0eXBlOiBcIiArIHR5cGUgKyBcIiBpbiBtYWtlT3JkXCIpO1xuICB9XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgc3Vic2VxdWVudCBzeW1ib2xOb2RlcyBoYXZlIHRoZSBzYW1lIGNsYXNzZXMsIHNrZXcsIG1heEZvbnQsXG4gKiBhbmQgc3R5bGVzLlxuICovXG5cblxudmFyIGNhbkNvbWJpbmUgPSAocHJldiwgbmV4dCkgPT4ge1xuICBpZiAoY3JlYXRlQ2xhc3MocHJldi5jbGFzc2VzKSAhPT0gY3JlYXRlQ2xhc3MobmV4dC5jbGFzc2VzKSB8fCBwcmV2LnNrZXcgIT09IG5leHQuc2tldyB8fCBwcmV2Lm1heEZvbnRTaXplICE9PSBuZXh0Lm1heEZvbnRTaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIHByZXYgYW5kIG5leHQgYm90aCBhcmUganVzdCBcIm1iaW5cInMgb3IgXCJtb3JkXCJzIHdlIGRvbid0IGNvbWJpbmUgdGhlbVxuICAvLyBzbyB0aGF0IHRoZSBwcm9wZXIgc3BhY2luZyBjYW4gYmUgcHJlc2VydmVkLlxuXG5cbiAgaWYgKHByZXYuY2xhc3Nlcy5sZW5ndGggPT09IDEpIHtcbiAgICB2YXIgY2xzID0gcHJldi5jbGFzc2VzWzBdO1xuXG4gICAgaWYgKGNscyA9PT0gXCJtYmluXCIgfHwgY2xzID09PSBcIm1vcmRcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIHN0eWxlIGluIHByZXYuc3R5bGUpIHtcbiAgICBpZiAocHJldi5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkgJiYgcHJldi5zdHlsZVtzdHlsZV0gIT09IG5leHQuc3R5bGVbc3R5bGVdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgX3N0eWxlIGluIG5leHQuc3R5bGUpIHtcbiAgICBpZiAobmV4dC5zdHlsZS5oYXNPd25Qcm9wZXJ0eShfc3R5bGUpICYmIHByZXYuc3R5bGVbX3N0eWxlXSAhPT0gbmV4dC5zdHlsZVtfc3R5bGVdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuLyoqXG4gKiBDb21iaW5lIGNvbnNlY3V0aXZlIGRvbVRyZWUuc3ltYm9sTm9kZXMgaW50byBhIHNpbmdsZSBzeW1ib2xOb2RlLlxuICogTm90ZTogdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBhcmd1bWVudC5cbiAqL1xuXG5cbnZhciB0cnlDb21iaW5lQ2hhcnMgPSBjaGFycyA9PiB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgdmFyIHByZXYgPSBjaGFyc1tpXTtcbiAgICB2YXIgbmV4dCA9IGNoYXJzW2kgKyAxXTtcblxuICAgIGlmIChwcmV2IGluc3RhbmNlb2YgU3ltYm9sTm9kZSAmJiBuZXh0IGluc3RhbmNlb2YgU3ltYm9sTm9kZSAmJiBjYW5Db21iaW5lKHByZXYsIG5leHQpKSB7XG4gICAgICBwcmV2LnRleHQgKz0gbmV4dC50ZXh0O1xuICAgICAgcHJldi5oZWlnaHQgPSBNYXRoLm1heChwcmV2LmhlaWdodCwgbmV4dC5oZWlnaHQpO1xuICAgICAgcHJldi5kZXB0aCA9IE1hdGgubWF4KHByZXYuZGVwdGgsIG5leHQuZGVwdGgpOyAvLyBVc2UgdGhlIGxhc3QgY2hhcmFjdGVyJ3MgaXRhbGljIGNvcnJlY3Rpb24gc2luY2Ugd2UgdXNlXG4gICAgICAvLyBpdCB0byBhZGQgcGFkZGluZyB0byB0aGUgcmlnaHQgb2YgdGhlIHNwYW4gY3JlYXRlZCBmcm9tXG4gICAgICAvLyB0aGUgY29tYmluZWQgY2hhcmFjdGVycy5cblxuICAgICAgcHJldi5pdGFsaWMgPSBuZXh0Lml0YWxpYztcbiAgICAgIGNoYXJzLnNwbGljZShpICsgMSwgMSk7XG4gICAgICBpLS07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoYXJzO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBoZWlnaHQsIGRlcHRoLCBhbmQgbWF4Rm9udFNpemUgb2YgYW4gZWxlbWVudCBiYXNlZCBvbiBpdHNcbiAqIGNoaWxkcmVuLlxuICovXG5cblxudmFyIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuID0gZnVuY3Rpb24gc2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4oZWxlbSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgdmFyIGRlcHRoID0gMDtcbiAgdmFyIG1heEZvbnRTaXplID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBlbGVtLmNoaWxkcmVuW2ldO1xuXG4gICAgaWYgKGNoaWxkLmhlaWdodCA+IGhlaWdodCkge1xuICAgICAgaGVpZ2h0ID0gY2hpbGQuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5kZXB0aCA+IGRlcHRoKSB7XG4gICAgICBkZXB0aCA9IGNoaWxkLmRlcHRoO1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5tYXhGb250U2l6ZSA+IG1heEZvbnRTaXplKSB7XG4gICAgICBtYXhGb250U2l6ZSA9IGNoaWxkLm1heEZvbnRTaXplO1xuICAgIH1cbiAgfVxuXG4gIGVsZW0uaGVpZ2h0ID0gaGVpZ2h0O1xuICBlbGVtLmRlcHRoID0gZGVwdGg7XG4gIGVsZW0ubWF4Rm9udFNpemUgPSBtYXhGb250U2l6ZTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3BhbiB3aXRoIHRoZSBnaXZlbiBsaXN0IG9mIGNsYXNzZXMsIGxpc3Qgb2YgY2hpbGRyZW4sIGFuZCBvcHRpb25zLlxuICpcbiAqIFRPRE8oIzk1Myk6IEVuc3VyZSB0aGF0IGBvcHRpb25zYCBpcyBhbHdheXMgcHJvdmlkZWQgKGN1cnJlbnRseSBzb21lIGNhbGxcbiAqIHNpdGVzIGRvbid0IHBhc3MgaXQpIGFuZCBtYWtlIHRoZSB0eXBlIGJlbG93IG1hbmRhdG9yeS5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKi9cblxuXG52YXIgbWFrZVNwYW4kMiA9IGZ1bmN0aW9uIG1ha2VTcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSkge1xuICB2YXIgc3BhbiA9IG5ldyBTcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKHNwYW4pO1xuICByZXR1cm4gc3Bhbjtcbn07IC8vIFNWRyBvbmUgaXMgc2ltcGxlciAtLSBkb2Vzbid0IHJlcXVpcmUgaGVpZ2h0LCBkZXB0aCwgbWF4LWZvbnQgc2V0dGluZy5cbi8vIFRoaXMgaXMgYWxzbyBhIHNlcGFyYXRlIG1ldGhvZCBmb3IgdHlwZXNhZmV0eS5cblxuXG52YXIgbWFrZVN2Z1NwYW4gPSAoY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMsIHN0eWxlKSA9PiBuZXcgU3BhbihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpO1xuXG52YXIgbWFrZUxpbmVTcGFuID0gZnVuY3Rpb24gbWFrZUxpbmVTcGFuKGNsYXNzTmFtZSwgb3B0aW9ucywgdGhpY2tuZXNzKSB7XG4gIHZhciBsaW5lID0gbWFrZVNwYW4kMihbY2xhc3NOYW1lXSwgW10sIG9wdGlvbnMpO1xuICBsaW5lLmhlaWdodCA9IE1hdGgubWF4KHRoaWNrbmVzcyB8fCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MsIG9wdGlvbnMubWluUnVsZVRoaWNrbmVzcyk7XG4gIGxpbmUuc3R5bGUuYm9yZGVyQm90dG9tV2lkdGggPSBtYWtlRW0obGluZS5oZWlnaHQpO1xuICBsaW5lLm1heEZvbnRTaXplID0gMS4wO1xuICByZXR1cm4gbGluZTtcbn07XG4vKipcbiAqIE1ha2VzIGFuIGFuY2hvciB3aXRoIHRoZSBnaXZlbiBocmVmLCBsaXN0IG9mIGNsYXNzZXMsIGxpc3Qgb2YgY2hpbGRyZW4sXG4gKiBhbmQgb3B0aW9ucy5cbiAqL1xuXG5cbnZhciBtYWtlQW5jaG9yID0gZnVuY3Rpb24gbWFrZUFuY2hvcihocmVmLCBjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucykge1xuICB2YXIgYW5jaG9yID0gbmV3IEFuY2hvcihocmVmLCBjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucyk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKGFuY2hvcik7XG4gIHJldHVybiBhbmNob3I7XG59O1xuLyoqXG4gKiBNYWtlcyBhIGRvY3VtZW50IGZyYWdtZW50IHdpdGggdGhlIGdpdmVuIGxpc3Qgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG52YXIgbWFrZUZyYWdtZW50ID0gZnVuY3Rpb24gbWFrZUZyYWdtZW50KGNoaWxkcmVuKSB7XG4gIHZhciBmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50KGNoaWxkcmVuKTtcbiAgc2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4oZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59O1xuLyoqXG4gKiBXcmFwcyBncm91cCBpbiBhIHNwYW4gaWYgaXQncyBhIGRvY3VtZW50IGZyYWdtZW50LCBhbGxvd2luZyB0byBhcHBseSBjbGFzc2VzXG4gKiBhbmQgc3R5bGVzXG4gKi9cblxuXG52YXIgd3JhcEZyYWdtZW50ID0gZnVuY3Rpb24gd3JhcEZyYWdtZW50KGdyb3VwLCBvcHRpb25zKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICByZXR1cm4gbWFrZVNwYW4kMihbXSwgW2dyb3VwXSwgb3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gZ3JvdXA7XG59OyAvLyBUaGVzZSBhcmUgZXhhY3Qgb2JqZWN0IHR5cGVzIHRvIGNhdGNoIHR5cG9zIGluIHRoZSBuYW1lcyBvZiB0aGUgb3B0aW9uYWwgZmllbGRzLlxuXG5cbi8vIENvbXB1dGVzIHRoZSB1cGRhdGVkIGBjaGlsZHJlbmAgbGlzdCBhbmQgdGhlIG92ZXJhbGwgZGVwdGguXG4vL1xuLy8gVGhpcyBoZWxwZXIgZnVuY3Rpb24gZm9yIG1ha2VWTGlzdCBtYWtlcyBpdCBlYXNpZXIgdG8gZW5mb3JjZSB0eXBlIHNhZmV0eSBieVxuLy8gYWxsb3dpbmcgZWFybHkgZXhpdHMgKHJldHVybnMpIGluIHRoZSBsb2dpYy5cbnZhciBnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGggPSBmdW5jdGlvbiBnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGgocGFyYW1zKSB7XG4gIGlmIChwYXJhbXMucG9zaXRpb25UeXBlID09PSBcImluZGl2aWR1YWxTaGlmdFwiKSB7XG4gICAgdmFyIG9sZENoaWxkcmVuID0gcGFyYW1zLmNoaWxkcmVuO1xuICAgIHZhciBjaGlsZHJlbiA9IFtvbGRDaGlsZHJlblswXV07IC8vIEFkZCBpbiBrZXJucyB0byB0aGUgbGlzdCBvZiBwYXJhbXMuY2hpbGRyZW4gdG8gZ2V0IGVhY2ggZWxlbWVudCB0byBiZVxuICAgIC8vIHNoaWZ0ZWQgdG8gdGhlIGNvcnJlY3Qgc3BlY2lmaWVkIHNoaWZ0XG5cbiAgICB2YXIgX2RlcHRoID0gLW9sZENoaWxkcmVuWzBdLnNoaWZ0IC0gb2xkQ2hpbGRyZW5bMF0uZWxlbS5kZXB0aDtcblxuICAgIHZhciBjdXJyUG9zID0gX2RlcHRoO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBvbGRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRpZmYgPSAtb2xkQ2hpbGRyZW5baV0uc2hpZnQgLSBjdXJyUG9zIC0gb2xkQ2hpbGRyZW5baV0uZWxlbS5kZXB0aDtcbiAgICAgIHZhciBzaXplID0gZGlmZiAtIChvbGRDaGlsZHJlbltpIC0gMV0uZWxlbS5oZWlnaHQgKyBvbGRDaGlsZHJlbltpIC0gMV0uZWxlbS5kZXB0aCk7XG4gICAgICBjdXJyUG9zID0gY3VyclBvcyArIGRpZmY7XG4gICAgICBjaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemVcbiAgICAgIH0pO1xuICAgICAgY2hpbGRyZW4ucHVzaChvbGRDaGlsZHJlbltpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZGVwdGg6IF9kZXB0aFxuICAgIH07XG4gIH1cblxuICB2YXIgZGVwdGg7XG5cbiAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwidG9wXCIpIHtcbiAgICAvLyBXZSBhbHdheXMgc3RhcnQgYXQgdGhlIGJvdHRvbSwgc28gY2FsY3VsYXRlIHRoZSBib3R0b20gYnkgYWRkaW5nIHVwXG4gICAgLy8gYWxsIHRoZSBzaXplc1xuICAgIHZhciBib3R0b20gPSBwYXJhbXMucG9zaXRpb25EYXRhO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHBhcmFtcy5jaGlsZHJlbi5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmFtcy5jaGlsZHJlbltfaV07XG4gICAgICBib3R0b20gLT0gY2hpbGQudHlwZSA9PT0gXCJrZXJuXCIgPyBjaGlsZC5zaXplIDogY2hpbGQuZWxlbS5oZWlnaHQgKyBjaGlsZC5lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIGRlcHRoID0gYm90dG9tO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiYm90dG9tXCIpIHtcbiAgICBkZXB0aCA9IC1wYXJhbXMucG9zaXRpb25EYXRhO1xuICB9IGVsc2Uge1xuICAgIHZhciBmaXJzdENoaWxkID0gcGFyYW1zLmNoaWxkcmVuWzBdO1xuXG4gICAgaWYgKGZpcnN0Q2hpbGQudHlwZSAhPT0gXCJlbGVtXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlyc3QgY2hpbGQgbXVzdCBoYXZlIHR5cGUgXCJlbGVtXCIuJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwic2hpZnRcIikge1xuICAgICAgZGVwdGggPSAtZmlyc3RDaGlsZC5lbGVtLmRlcHRoIC0gcGFyYW1zLnBvc2l0aW9uRGF0YTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiZmlyc3RCYXNlbGluZVwiKSB7XG4gICAgICBkZXB0aCA9IC1maXJzdENoaWxkLmVsZW0uZGVwdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcG9zaXRpb25UeXBlIFwiICsgcGFyYW1zLnBvc2l0aW9uVHlwZSArIFwiLlwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNoaWxkcmVuOiBwYXJhbXMuY2hpbGRyZW4sXG4gICAgZGVwdGhcbiAgfTtcbn07XG4vKipcbiAqIE1ha2VzIGEgdmVydGljYWwgbGlzdCBieSBzdGFja2luZyBlbGVtZW50cyBhbmQga2VybnMgb24gdG9wIG9mIGVhY2ggb3RoZXIuXG4gKiBBbGxvd3MgZm9yIG1hbnkgZGlmZmVyZW50IHdheXMgb2Ygc3BlY2lmeWluZyB0aGUgcG9zaXRpb25pbmcgbWV0aG9kLlxuICpcbiAqIFNlZSBWTGlzdFBhcmFtIGRvY3VtZW50YXRpb24gYWJvdmUuXG4gKi9cblxuXG52YXIgbWFrZVZMaXN0ID0gZnVuY3Rpb24gbWFrZVZMaXN0KHBhcmFtcywgb3B0aW9ucykge1xuICB2YXIge1xuICAgIGNoaWxkcmVuLFxuICAgIGRlcHRoXG4gIH0gPSBnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGgocGFyYW1zKTsgLy8gQ3JlYXRlIGEgc3RydXQgdGhhdCBpcyB0YWxsZXIgdGhhbiBhbnkgbGlzdCBpdGVtLiBUaGUgc3RydXQgaXMgYWRkZWQgdG9cbiAgLy8gZWFjaCBpdGVtLCB3aGVyZSBpdCB3aWxsIGRldGVybWluZSB0aGUgaXRlbSdzIGJhc2VsaW5lLiBTaW5jZSBpdCBoYXNcbiAgLy8gYG92ZXJmbG93OmhpZGRlbmAsIHRoZSBzdHJ1dCdzIHRvcCBlZGdlIHdpbGwgc2l0IG9uIHRoZSBpdGVtJ3MgbGluZSBib3gnc1xuICAvLyB0b3AgZWRnZSBhbmQgdGhlIHN0cnV0J3MgYm90dG9tIGVkZ2Ugd2lsbCBzaXQgb24gdGhlIGl0ZW0ncyBiYXNlbGluZSxcbiAgLy8gd2l0aCBubyBhZGRpdGlvbmFsIGxpbmUtaGVpZ2h0IHNwYWNpbmcuIFRoaXMgYWxsb3dzIHRoZSBpdGVtIGJhc2VsaW5lIHRvXG4gIC8vIGJlIHBvc2l0aW9uZWQgcHJlY2lzZWx5IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgZm9udCBhc2NlbnQgYW5kXG4gIC8vIGxpbmUtaGVpZ2h0LlxuXG4gIHZhciBwc3RydXRTaXplID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XG5cbiAgICBpZiAoY2hpbGQudHlwZSA9PT0gXCJlbGVtXCIpIHtcbiAgICAgIHZhciBlbGVtID0gY2hpbGQuZWxlbTtcbiAgICAgIHBzdHJ1dFNpemUgPSBNYXRoLm1heChwc3RydXRTaXplLCBlbGVtLm1heEZvbnRTaXplLCBlbGVtLmhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgcHN0cnV0U2l6ZSArPSAyO1xuICB2YXIgcHN0cnV0ID0gbWFrZVNwYW4kMihbXCJwc3RydXRcIl0sIFtdKTtcbiAgcHN0cnV0LnN0eWxlLmhlaWdodCA9IG1ha2VFbShwc3RydXRTaXplKTsgLy8gQ3JlYXRlIGEgbmV3IGxpc3Qgb2YgYWN0dWFsIGNoaWxkcmVuIGF0IHRoZSBjb3JyZWN0IG9mZnNldHNcblxuICB2YXIgcmVhbENoaWxkcmVuID0gW107XG4gIHZhciBtaW5Qb3MgPSBkZXB0aDtcbiAgdmFyIG1heFBvcyA9IGRlcHRoO1xuICB2YXIgY3VyclBvcyA9IGRlcHRoO1xuXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGNoaWxkcmVuLmxlbmd0aDsgX2kyKyspIHtcbiAgICB2YXIgX2NoaWxkID0gY2hpbGRyZW5bX2kyXTtcblxuICAgIGlmIChfY2hpbGQudHlwZSA9PT0gXCJrZXJuXCIpIHtcbiAgICAgIGN1cnJQb3MgKz0gX2NoaWxkLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfZWxlbSA9IF9jaGlsZC5lbGVtO1xuICAgICAgdmFyIGNsYXNzZXMgPSBfY2hpbGQud3JhcHBlckNsYXNzZXMgfHwgW107XG4gICAgICB2YXIgc3R5bGUgPSBfY2hpbGQud3JhcHBlclN0eWxlIHx8IHt9O1xuICAgICAgdmFyIGNoaWxkV3JhcCA9IG1ha2VTcGFuJDIoY2xhc3NlcywgW3BzdHJ1dCwgX2VsZW1dLCB1bmRlZmluZWQsIHN0eWxlKTtcbiAgICAgIGNoaWxkV3JhcC5zdHlsZS50b3AgPSBtYWtlRW0oLXBzdHJ1dFNpemUgLSBjdXJyUG9zIC0gX2VsZW0uZGVwdGgpO1xuXG4gICAgICBpZiAoX2NoaWxkLm1hcmdpbkxlZnQpIHtcbiAgICAgICAgY2hpbGRXcmFwLnN0eWxlLm1hcmdpbkxlZnQgPSBfY2hpbGQubWFyZ2luTGVmdDtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jaGlsZC5tYXJnaW5SaWdodCkge1xuICAgICAgICBjaGlsZFdyYXAuc3R5bGUubWFyZ2luUmlnaHQgPSBfY2hpbGQubWFyZ2luUmlnaHQ7XG4gICAgICB9XG5cbiAgICAgIHJlYWxDaGlsZHJlbi5wdXNoKGNoaWxkV3JhcCk7XG4gICAgICBjdXJyUG9zICs9IF9lbGVtLmhlaWdodCArIF9lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIG1pblBvcyA9IE1hdGgubWluKG1pblBvcywgY3VyclBvcyk7XG4gICAgbWF4UG9zID0gTWF0aC5tYXgobWF4UG9zLCBjdXJyUG9zKTtcbiAgfSAvLyBUaGUgdmxpc3QgY29udGVudHMgZ28gaW4gYSB0YWJsZS1jZWxsIHdpdGggYHZlcnRpY2FsLWFsaWduOmJvdHRvbWAuXG4gIC8vIFRoaXMgY2VsbCdzIGJvdHRvbSBlZGdlIHdpbGwgZGV0ZXJtaW5lIHRoZSBjb250YWluaW5nIHRhYmxlJ3MgYmFzZWxpbmVcbiAgLy8gd2l0aG91dCBvdmVybHkgZXhwYW5kaW5nIHRoZSBjb250YWluaW5nIGxpbmUtYm94LlxuXG5cbiAgdmFyIHZsaXN0ID0gbWFrZVNwYW4kMihbXCJ2bGlzdFwiXSwgcmVhbENoaWxkcmVuKTtcbiAgdmxpc3Quc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKG1heFBvcyk7IC8vIEEgc2Vjb25kIHJvdyBpcyB1c2VkIGlmIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIHZsaXN0J3MgZGVwdGguXG5cbiAgdmFyIHJvd3M7XG5cbiAgaWYgKG1pblBvcyA8IDApIHtcbiAgICAvLyBXZSB3aWxsIGRlZmluZSBkZXB0aCBpbiBhbiBlbXB0eSBzcGFuIHdpdGggZGlzcGxheTogdGFibGUtY2VsbC5cbiAgICAvLyBJdCBzaG91bGQgcmVuZGVyIHdpdGggdGhlIGhlaWdodCB0aGF0IHdlIGRlZmluZS4gQnV0IENocm9tZSwgaW5cbiAgICAvLyBjb250ZW50ZWRpdGFibGUgbW9kZSBvbmx5LCB0cmVhdHMgdGhhdCBzcGFuIGFzIGlmIGl0IGNvbnRhaW5zIHNvbWVcbiAgICAvLyB0ZXh0IGNvbnRlbnQuIEFuZCB0aGF0IG1pbi1oZWlnaHQgb3Zlci1yaWRlcyBvdXIgZGVzaXJlZCBoZWlnaHQuXG4gICAgLy8gU28gd2UgcHV0IGFub3RoZXIgZW1wdHkgc3BhbiBpbnNpZGUgdGhlIGRlcHRoIHN0cnV0IHNwYW4uXG4gICAgdmFyIGVtcHR5U3BhbiA9IG1ha2VTcGFuJDIoW10sIFtdKTtcbiAgICB2YXIgZGVwdGhTdHJ1dCA9IG1ha2VTcGFuJDIoW1widmxpc3RcIl0sIFtlbXB0eVNwYW5dKTtcbiAgICBkZXB0aFN0cnV0LnN0eWxlLmhlaWdodCA9IG1ha2VFbSgtbWluUG9zKTsgLy8gU2FmYXJpIHdhbnRzIHRoZSBmaXJzdCByb3cgdG8gaGF2ZSBpbmxpbmUgY29udGVudDsgb3RoZXJ3aXNlIGl0XG4gICAgLy8gcHV0cyB0aGUgYm90dG9tIG9mIHRoZSAqc2Vjb25kKiByb3cgb24gdGhlIGJhc2VsaW5lLlxuXG4gICAgdmFyIHRvcFN0cnV0ID0gbWFrZVNwYW4kMihbXCJ2bGlzdC1zXCJdLCBbbmV3IFN5bWJvbE5vZGUoXCJcXHUyMDBiXCIpXSk7XG4gICAgcm93cyA9IFttYWtlU3BhbiQyKFtcInZsaXN0LXJcIl0sIFt2bGlzdCwgdG9wU3RydXRdKSwgbWFrZVNwYW4kMihbXCJ2bGlzdC1yXCJdLCBbZGVwdGhTdHJ1dF0pXTtcbiAgfSBlbHNlIHtcbiAgICByb3dzID0gW21ha2VTcGFuJDIoW1widmxpc3QtclwiXSwgW3ZsaXN0XSldO1xuICB9XG5cbiAgdmFyIHZ0YWJsZSA9IG1ha2VTcGFuJDIoW1widmxpc3QtdFwiXSwgcm93cyk7XG5cbiAgaWYgKHJvd3MubGVuZ3RoID09PSAyKSB7XG4gICAgdnRhYmxlLmNsYXNzZXMucHVzaChcInZsaXN0LXQyXCIpO1xuICB9XG5cbiAgdnRhYmxlLmhlaWdodCA9IG1heFBvcztcbiAgdnRhYmxlLmRlcHRoID0gLW1pblBvcztcbiAgcmV0dXJuIHZ0YWJsZTtcbn07IC8vIEdsdWUgaXMgYSBjb25jZXB0IGZyb20gVGVYIHdoaWNoIGlzIGEgZmxleGlibGUgc3BhY2UgYmV0d2VlbiBlbGVtZW50cyBpblxuLy8gZWl0aGVyIGEgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBsaXN0LiBJbiBLYVRlWCwgYXQgbGVhc3QgZm9yIG5vdywgaXQnc1xuLy8gc3RhdGljIHNwYWNlIGJldHdlZW4gZWxlbWVudHMgaW4gYSBob3Jpem9udGFsIGxheW91dC5cblxuXG52YXIgbWFrZUdsdWUgPSAobWVhc3VyZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgLy8gTWFrZSBhbiBlbXB0eSBzcGFuIGZvciB0aGUgc3BhY2VcbiAgdmFyIHJ1bGUgPSBtYWtlU3BhbiQyKFtcIm1zcGFjZVwiXSwgW10sIG9wdGlvbnMpO1xuICB2YXIgc2l6ZSA9IGNhbGN1bGF0ZVNpemUobWVhc3VyZW1lbnQsIG9wdGlvbnMpO1xuICBydWxlLnN0eWxlLm1hcmdpblJpZ2h0ID0gbWFrZUVtKHNpemUpO1xuICByZXR1cm4gcnVsZTtcbn07IC8vIFRha2VzIGZvbnQgb3B0aW9ucywgYW5kIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGZvbnRMb29rdXAgbmFtZVxuXG5cbnZhciByZXRyaWV2ZVRleHRGb250TmFtZSA9IGZ1bmN0aW9uIHJldHJpZXZlVGV4dEZvbnROYW1lKGZvbnRGYW1pbHksIGZvbnRXZWlnaHQsIGZvbnRTaGFwZSkge1xuICB2YXIgYmFzZUZvbnROYW1lID0gXCJcIjtcblxuICBzd2l0Y2ggKGZvbnRGYW1pbHkpIHtcbiAgICBjYXNlIFwiYW1zcm1cIjpcbiAgICAgIGJhc2VGb250TmFtZSA9IFwiQU1TXCI7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJ0ZXh0cm1cIjpcbiAgICAgIGJhc2VGb250TmFtZSA9IFwiTWFpblwiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidGV4dHNmXCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIlNhbnNTZXJpZlwiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidGV4dHR0XCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIlR5cGV3cml0ZXJcIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGJhc2VGb250TmFtZSA9IGZvbnRGYW1pbHk7XG4gICAgLy8gdXNlIGZvbnRzIGFkZGVkIGJ5IGEgcGx1Z2luXG4gIH1cblxuICB2YXIgZm9udFN0eWxlc05hbWU7XG5cbiAgaWYgKGZvbnRXZWlnaHQgPT09IFwidGV4dGJmXCIgJiYgZm9udFNoYXBlID09PSBcInRleHRpdFwiKSB7XG4gICAgZm9udFN0eWxlc05hbWUgPSBcIkJvbGRJdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChmb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgZm9udFN0eWxlc05hbWUgPSBcIkJvbGRcIjtcbiAgfSBlbHNlIGlmIChmb250V2VpZ2h0ID09PSBcInRleHRpdFwiKSB7XG4gICAgZm9udFN0eWxlc05hbWUgPSBcIkl0YWxpY1wiO1xuICB9IGVsc2Uge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJSZWd1bGFyXCI7XG4gIH1cblxuICByZXR1cm4gYmFzZUZvbnROYW1lICsgXCItXCIgKyBmb250U3R5bGVzTmFtZTtcbn07XG4vKipcbiAqIE1hcHMgVGVYIGZvbnQgY29tbWFuZHMgdG8gb2JqZWN0cyBjb250YWluaW5nOlxuICogLSB2YXJpYW50OiBzdHJpbmcgdXNlZCBmb3IgXCJtYXRodmFyaWFudFwiIGF0dHJpYnV0ZSBpbiBidWlsZE1hdGhNTC5qc1xuICogLSBmb250TmFtZTogdGhlIFwic3R5bGVcIiBwYXJhbWV0ZXIgdG8gZm9udE1ldHJpY3MuZ2V0Q2hhcmFjdGVyTWV0cmljc1xuICovXG4vLyBBIG1hcCBiZXR3ZWVuIHRleCBmb250IGNvbW1hbmRzIGFuIE1hdGhNTCBtYXRodmFyaWFudCBhdHRyaWJ1dGUgdmFsdWVzXG5cblxudmFyIGZvbnRNYXAgPSB7XG4gIC8vIHN0eWxlc1xuICBcIm1hdGhiZlwiOiB7XG4gICAgdmFyaWFudDogXCJib2xkXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1Cb2xkXCJcbiAgfSxcbiAgXCJtYXRocm1cIjoge1xuICAgIHZhcmlhbnQ6IFwibm9ybWFsXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1SZWd1bGFyXCJcbiAgfSxcbiAgXCJ0ZXh0aXRcIjoge1xuICAgIHZhcmlhbnQ6IFwiaXRhbGljXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1JdGFsaWNcIlxuICB9LFxuICBcIm1hdGhpdFwiOiB7XG4gICAgdmFyaWFudDogXCJpdGFsaWNcIixcbiAgICBmb250TmFtZTogXCJNYWluLUl0YWxpY1wiXG4gIH0sXG4gIFwibWF0aG5vcm1hbFwiOiB7XG4gICAgdmFyaWFudDogXCJpdGFsaWNcIixcbiAgICBmb250TmFtZTogXCJNYXRoLUl0YWxpY1wiXG4gIH0sXG4gIC8vIFwiYm9sZHN5bWJvbFwiIGlzIG1pc3NpbmcgYmVjYXVzZSB0aGV5IHJlcXVpcmUgdGhlIHVzZSBvZiBtdWx0aXBsZSBmb250czpcbiAgLy8gTWF0aC1Cb2xkSXRhbGljIGFuZCBNYWluLUJvbGQuICBUaGlzIGlzIGhhbmRsZWQgYnkgYSBzcGVjaWFsIGNhc2UgaW5cbiAgLy8gbWFrZU9yZCB3aGljaCBlbmRzIHVwIGNhbGxpbmcgYm9sZHN5bWJvbC5cbiAgLy8gZmFtaWxpZXNcbiAgXCJtYXRoYmJcIjoge1xuICAgIHZhcmlhbnQ6IFwiZG91YmxlLXN0cnVja1wiLFxuICAgIGZvbnROYW1lOiBcIkFNUy1SZWd1bGFyXCJcbiAgfSxcbiAgXCJtYXRoY2FsXCI6IHtcbiAgICB2YXJpYW50OiBcInNjcmlwdFwiLFxuICAgIGZvbnROYW1lOiBcIkNhbGlncmFwaGljLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhmcmFrXCI6IHtcbiAgICB2YXJpYW50OiBcImZyYWt0dXJcIixcbiAgICBmb250TmFtZTogXCJGcmFrdHVyLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhzY3JcIjoge1xuICAgIHZhcmlhbnQ6IFwic2NyaXB0XCIsXG4gICAgZm9udE5hbWU6IFwiU2NyaXB0LVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhzZlwiOiB7XG4gICAgdmFyaWFudDogXCJzYW5zLXNlcmlmXCIsXG4gICAgZm9udE5hbWU6IFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGh0dFwiOiB7XG4gICAgdmFyaWFudDogXCJtb25vc3BhY2VcIixcbiAgICBmb250TmFtZTogXCJUeXBld3JpdGVyLVJlZ3VsYXJcIlxuICB9XG59O1xudmFyIHN2Z0RhdGEgPSB7XG4gIC8vICAgcGF0aCwgd2lkdGgsIGhlaWdodFxuICB2ZWM6IFtcInZlY1wiLCAwLjQ3MSwgMC43MTRdLFxuICAvLyB2YWx1ZXMgZnJvbSB0aGUgZm9udCBnbHlwaFxuICBvaWludFNpemUxOiBbXCJvaWludFNpemUxXCIsIDAuOTU3LCAwLjQ5OV0sXG4gIC8vIG92YWwgdG8gb3ZlcmxheSB0aGUgaW50ZWdyYW5kXG4gIG9paW50U2l6ZTI6IFtcIm9paW50U2l6ZTJcIiwgMS40NzIsIDAuNjU5XSxcbiAgb2lpaW50U2l6ZTE6IFtcIm9paWludFNpemUxXCIsIDEuMzA0LCAwLjQ5OV0sXG4gIG9paWludFNpemUyOiBbXCJvaWlpbnRTaXplMlwiLCAxLjk4LCAwLjY1OV1cbn07XG5cbnZhciBzdGF0aWNTdmcgPSBmdW5jdGlvbiBzdGF0aWNTdmcodmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gQ3JlYXRlIGEgc3BhbiB3aXRoIGlubGluZSBTVkcgZm9yIHRoZSBlbGVtZW50LlxuICB2YXIgW3BhdGhOYW1lLCB3aWR0aCwgaGVpZ2h0XSA9IHN2Z0RhdGFbdmFsdWVdO1xuICB2YXIgcGF0aCA9IG5ldyBQYXRoTm9kZShwYXRoTmFtZSk7XG4gIHZhciBzdmdOb2RlID0gbmV3IFN2Z05vZGUoW3BhdGhdLCB7XG4gICAgXCJ3aWR0aFwiOiBtYWtlRW0od2lkdGgpLFxuICAgIFwiaGVpZ2h0XCI6IG1ha2VFbShoZWlnaHQpLFxuICAgIC8vIE92ZXJyaWRlIENTUyBydWxlIGAua2F0ZXggc3ZnIHsgd2lkdGg6IDEwMCUgfWBcbiAgICBcInN0eWxlXCI6IFwid2lkdGg6XCIgKyBtYWtlRW0od2lkdGgpLFxuICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIDEwMDAgKiB3aWR0aCArIFwiIFwiICsgMTAwMCAqIGhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pblwiXG4gIH0pO1xuICB2YXIgc3BhbiA9IG1ha2VTdmdTcGFuKFtcIm92ZXJsYXlcIl0sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShoZWlnaHQpO1xuICBzcGFuLnN0eWxlLndpZHRoID0gbWFrZUVtKHdpZHRoKTtcbiAgcmV0dXJuIHNwYW47XG59O1xuXG52YXIgYnVpbGRDb21tb24gPSB7XG4gIGZvbnRNYXAsXG4gIG1ha2VTeW1ib2wsXG4gIG1hdGhzeW0sXG4gIG1ha2VTcGFuOiBtYWtlU3BhbiQyLFxuICBtYWtlU3ZnU3BhbixcbiAgbWFrZUxpbmVTcGFuLFxuICBtYWtlQW5jaG9yLFxuICBtYWtlRnJhZ21lbnQsXG4gIHdyYXBGcmFnbWVudCxcbiAgbWFrZVZMaXN0LFxuICBtYWtlT3JkLFxuICBtYWtlR2x1ZSxcbiAgc3RhdGljU3ZnLFxuICBzdmdEYXRhLFxuICB0cnlDb21iaW5lQ2hhcnNcbn07XG5cbi8qKlxuICogRGVzY3JpYmVzIHNwYWNlcyBiZXR3ZWVuIGRpZmZlcmVudCBjbGFzc2VzIG9mIGF0b21zLlxuICovXG52YXIgdGhpbnNwYWNlID0ge1xuICBudW1iZXI6IDMsXG4gIHVuaXQ6IFwibXVcIlxufTtcbnZhciBtZWRpdW1zcGFjZSA9IHtcbiAgbnVtYmVyOiA0LFxuICB1bml0OiBcIm11XCJcbn07XG52YXIgdGhpY2tzcGFjZSA9IHtcbiAgbnVtYmVyOiA1LFxuICB1bml0OiBcIm11XCJcbn07IC8vIE1ha2luZyB0aGUgdHlwZSBiZWxvdyBleGFjdCB3aXRoIGFsbCBvcHRpb25hbCBmaWVsZHMgZG9lc24ndCB3b3JrIGR1ZSB0b1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDU4MlxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNTY4OFxuLy8gSG93ZXZlciwgc2luY2UgKmFsbCogZmllbGRzIGFyZSBvcHRpb25hbCwgJFNoYXBlPD4gd29ya3MgYXMgc3VnZ2VzdGVkIGluIDU2ODhcbi8vIGFib3ZlLlxuXG4vLyBTcGFjaW5nIHJlbGF0aW9uc2hpcHMgZm9yIGRpc3BsYXkgYW5kIHRleHQgc3R5bGVzXG52YXIgc3BhY2luZ3MgPSB7XG4gIG1vcmQ6IHtcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtYmluOiBtZWRpdW1zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1vcDoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1iaW46IHtcbiAgICBtb3JkOiBtZWRpdW1zcGFjZSxcbiAgICBtb3A6IG1lZGl1bXNwYWNlLFxuICAgIG1vcGVuOiBtZWRpdW1zcGFjZSxcbiAgICBtaW5uZXI6IG1lZGl1bXNwYWNlXG4gIH0sXG4gIG1yZWw6IHtcbiAgICBtb3JkOiB0aGlja3NwYWNlLFxuICAgIG1vcDogdGhpY2tzcGFjZSxcbiAgICBtb3BlbjogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaWNrc3BhY2VcbiAgfSxcbiAgbW9wZW46IHt9LFxuICBtY2xvc2U6IHtcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtYmluOiBtZWRpdW1zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1wdW5jdDoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1vcGVuOiB0aGluc3BhY2UsXG4gICAgbWNsb3NlOiB0aGluc3BhY2UsXG4gICAgbXB1bmN0OiB0aGluc3BhY2UsXG4gICAgbWlubmVyOiB0aGluc3BhY2VcbiAgfSxcbiAgbWlubmVyOiB7XG4gICAgbW9yZDogdGhpbnNwYWNlLFxuICAgIG1vcDogdGhpbnNwYWNlLFxuICAgIG1iaW46IG1lZGl1bXNwYWNlLFxuICAgIG1yZWw6IHRoaWNrc3BhY2UsXG4gICAgbW9wZW46IHRoaW5zcGFjZSxcbiAgICBtcHVuY3Q6IHRoaW5zcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9XG59OyAvLyBTcGFjaW5nIHJlbGF0aW9uc2hpcHMgZm9yIHNjcmlwdCBhbmQgc2NyaXB0c2NyaXB0IHN0eWxlc1xuXG52YXIgdGlnaHRTcGFjaW5ncyA9IHtcbiAgbW9yZDoge1xuICAgIG1vcDogdGhpbnNwYWNlXG4gIH0sXG4gIG1vcDoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZVxuICB9LFxuICBtYmluOiB7fSxcbiAgbXJlbDoge30sXG4gIG1vcGVuOiB7fSxcbiAgbWNsb3NlOiB7XG4gICAgbW9wOiB0aGluc3BhY2VcbiAgfSxcbiAgbXB1bmN0OiB7fSxcbiAgbWlubmVyOiB7XG4gICAgbW9wOiB0aGluc3BhY2VcbiAgfVxufTtcblxuLyoqIENvbnRleHQgcHJvdmlkZWQgdG8gZnVuY3Rpb24gaGFuZGxlcnMgZm9yIGVycm9yIG1lc3NhZ2VzLiAqL1xuLy8gTm90ZTogcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIHJldHVybiB0eXBlIHVuaW9uIHdpbGwgY2F1c2UgYSBmbG93IGVycm9yLlxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8zNjYzLlxuLy8gTW9yZSBnZW5lcmFsIHZlcnNpb24gb2YgYEh0bWxCdWlsZGVyYCBmb3Igbm9kZXMgKGUuZy4gXFxzdW0sIGFjY2VudCB0eXBlcylcbi8vIHdob3NlIHByZXNlbmNlIGltcGFjdHMgc3VwZXIvc3Vic2NyaXB0aW5nLiBJbiB0aGlzIGNhc2UsIFBhcnNlTm9kZTxcInN1cHN1YlwiPlxuLy8gZGVsZWdhdGVzIGl0cyBIVE1MIGJ1aWxkaW5nIHRvIHRoZSBIdG1sQnVpbGRlciBjb3JyZXNwb25kaW5nIHRvIHRoZXNlIG5vZGVzLlxuXG4vKipcbiAqIEZpbmFsIGZ1bmN0aW9uIHNwZWMgZm9yIHVzZSBhdCBwYXJzZSB0aW1lLlxuICogVGhpcyBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIGBGdW5jdGlvblByb3BTcGVjYCwgZXhjZXB0IGl0XG4gKiAxLiBpbmNsdWRlcyB0aGUgZnVuY3Rpb24gaGFuZGxlciwgYW5kXG4gKiAyLiByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGV4Y2VwdCBhcmdUeXBlcy5cbiAqIEl0IGlzIGdlbmVyYXRlZCBieSBgZGVmaW5lRnVuY3Rpb24oKWAgYmVsb3cuXG4gKi9cblxuLyoqXG4gKiBBbGwgcmVnaXN0ZXJlZCBmdW5jdGlvbnMuXG4gKiBgZnVuY3Rpb25zLmpzYCBqdXN0IGV4cG9ydHMgdGhpcyBzYW1lIGRpY3Rpb25hcnkgYWdhaW4gYW5kIG1ha2VzIGl0IHB1YmxpYy5cbiAqIGBQYXJzZXIuanNgIHJlcXVpcmVzIHRoaXMgZGljdGlvbmFyeS5cbiAqL1xudmFyIF9mdW5jdGlvbnMgPSB7fTtcbi8qKlxuICogQWxsIEhUTUwgYnVpbGRlcnMuIFNob3VsZCBiZSBvbmx5IHVzZWQgaW4gdGhlIGBkZWZpbmUqYCBhbmQgdGhlIGBidWlsZCpNTGBcbiAqIGZ1bmN0aW9ucy5cbiAqL1xuXG52YXIgX2h0bWxHcm91cEJ1aWxkZXJzID0ge307XG4vKipcbiAqIEFsbCBNYXRoTUwgYnVpbGRlcnMuIFNob3VsZCBiZSBvbmx5IHVzZWQgaW4gdGhlIGBkZWZpbmUqYCBhbmQgdGhlIGBidWlsZCpNTGBcbiAqIGZ1bmN0aW9ucy5cbiAqL1xuXG52YXIgX21hdGhtbEdyb3VwQnVpbGRlcnMgPSB7fTtcbmZ1bmN0aW9uIGRlZmluZUZ1bmN0aW9uKF9yZWYpIHtcbiAgdmFyIHtcbiAgICB0eXBlLFxuICAgIG5hbWVzLFxuICAgIHByb3BzLFxuICAgIGhhbmRsZXIsXG4gICAgaHRtbEJ1aWxkZXIsXG4gICAgbWF0aG1sQnVpbGRlclxuICB9ID0gX3JlZjtcbiAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzIG9mIGZ1bmN0aW9uc1xuICB2YXIgZGF0YSA9IHtcbiAgICB0eXBlLFxuICAgIG51bUFyZ3M6IHByb3BzLm51bUFyZ3MsXG4gICAgYXJnVHlwZXM6IHByb3BzLmFyZ1R5cGVzLFxuICAgIGFsbG93ZWRJbkFyZ3VtZW50OiAhIXByb3BzLmFsbG93ZWRJbkFyZ3VtZW50LFxuICAgIGFsbG93ZWRJblRleHQ6ICEhcHJvcHMuYWxsb3dlZEluVGV4dCxcbiAgICBhbGxvd2VkSW5NYXRoOiBwcm9wcy5hbGxvd2VkSW5NYXRoID09PSB1bmRlZmluZWQgPyB0cnVlIDogcHJvcHMuYWxsb3dlZEluTWF0aCxcbiAgICBudW1PcHRpb25hbEFyZ3M6IHByb3BzLm51bU9wdGlvbmFsQXJncyB8fCAwLFxuICAgIGluZml4OiAhIXByb3BzLmluZml4LFxuICAgIHByaW1pdGl2ZTogISFwcm9wcy5wcmltaXRpdmUsXG4gICAgaGFuZGxlcjogaGFuZGxlclxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICBfZnVuY3Rpb25zW25hbWVzW2ldXSA9IGRhdGE7XG4gIH1cblxuICBpZiAodHlwZSkge1xuICAgIGlmIChodG1sQnVpbGRlcikge1xuICAgICAgX2h0bWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gaHRtbEJ1aWxkZXI7XG4gICAgfVxuXG4gICAgaWYgKG1hdGhtbEJ1aWxkZXIpIHtcbiAgICAgIF9tYXRobWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gbWF0aG1sQnVpbGRlcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVXNlIHRoaXMgdG8gcmVnaXN0ZXIgb25seSB0aGUgSFRNTCBhbmQgTWF0aE1MIGJ1aWxkZXJzIGZvciBhIGZ1bmN0aW9uIChlLmcuXG4gKiBpZiB0aGUgZnVuY3Rpb24ncyBQYXJzZU5vZGUgaXMgZ2VuZXJhdGVkIGluIFBhcnNlci5qcyByYXRoZXIgdGhhbiB2aWEgYVxuICogc3RhbmQtYWxvbmUgaGFuZGxlciBwcm92aWRlZCB0byBgZGVmaW5lRnVuY3Rpb25gKS5cbiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKF9yZWYyKSB7XG4gIHZhciB7XG4gICAgdHlwZSxcbiAgICBodG1sQnVpbGRlcixcbiAgICBtYXRobWxCdWlsZGVyXG4gIH0gPSBfcmVmMjtcbiAgZGVmaW5lRnVuY3Rpb24oe1xuICAgIHR5cGUsXG4gICAgbmFtZXM6IFtdLFxuICAgIHByb3BzOiB7XG4gICAgICBudW1BcmdzOiAwXG4gICAgfSxcblxuICAgIGhhbmRsZXIoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBuZXZlciBiZSBjYWxsZWQuJyk7XG4gICAgfSxcblxuICAgIGh0bWxCdWlsZGVyLFxuICAgIG1hdGhtbEJ1aWxkZXJcbiAgfSk7XG59XG52YXIgbm9ybWFsaXplQXJndW1lbnQgPSBmdW5jdGlvbiBub3JtYWxpemVBcmd1bWVudChhcmcpIHtcbiAgcmV0dXJuIGFyZy50eXBlID09PSBcIm9yZGdyb3VwXCIgJiYgYXJnLmJvZHkubGVuZ3RoID09PSAxID8gYXJnLmJvZHlbMF0gOiBhcmc7XG59OyAvLyBTaW5jZSB0aGUgY29ycmVzcG9uZGluZyBidWlsZEhUTUwvYnVpbGRNYXRoTUwgZnVuY3Rpb24gZXhwZWN0cyBhXG4vLyBsaXN0IG9mIGVsZW1lbnRzLCB3ZSBub3JtYWxpemUgZm9yIGRpZmZlcmVudCBraW5kcyBvZiBhcmd1bWVudHNcblxudmFyIG9yZGFyZ3VtZW50ID0gZnVuY3Rpb24gb3JkYXJndW1lbnQoYXJnKSB7XG4gIHJldHVybiBhcmcudHlwZSA9PT0gXCJvcmRncm91cFwiID8gYXJnLmJvZHkgOiBbYXJnXTtcbn07XG5cbi8qKlxuICogVGhpcyBmaWxlIGRvZXMgdGhlIG1haW4gd29yayBvZiBidWlsZGluZyBhIGRvbVRyZWUgc3RydWN0dXJlIGZyb20gYSBwYXJzZVxuICogdHJlZS4gVGhlIGVudHJ5IHBvaW50IGlzIHRoZSBgYnVpbGRIVE1MYCBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgYSBwYXJzZSB0cmVlLlxuICogVGhlbiwgdGhlIGJ1aWxkRXhwcmVzc2lvbiwgYnVpbGRHcm91cCwgYW5kIHZhcmlvdXMgZ3JvdXBCdWlsZGVycyBmdW5jdGlvbnNcbiAqIGFyZSBjYWxsZWQsIHRvIHByb2R1Y2UgYSBmaW5hbCBIVE1MIHRyZWUuXG4gKi9cbnZhciBtYWtlU3BhbiQxID0gYnVpbGRDb21tb24ubWFrZVNwYW47IC8vIEJpbmFyeSBhdG9tcyAoZmlyc3QgY2xhc3MgYG1iaW5gKSBjaGFuZ2UgaW50byBvcmRpbmFyeSBhdG9tcyAoYG1vcmRgKVxuLy8gZGVwZW5kaW5nIG9uIHRoZWlyIHN1cnJvdW5kaW5ncy4gU2VlIFRlWGJvb2sgcGcuIDQ0Mi00NDYsIFJ1bGVzIDUgYW5kIDYsXG4vLyBhbmQgdGhlIHRleHQgYmVmb3JlIFJ1bGUgMTkuXG5cbnZhciBiaW5MZWZ0Q2FuY2VsbGVyID0gW1wibGVmdG1vc3RcIiwgXCJtYmluXCIsIFwibW9wZW5cIiwgXCJtcmVsXCIsIFwibW9wXCIsIFwibXB1bmN0XCJdO1xudmFyIGJpblJpZ2h0Q2FuY2VsbGVyID0gW1wicmlnaHRtb3N0XCIsIFwibXJlbFwiLCBcIm1jbG9zZVwiLCBcIm1wdW5jdFwiXTtcbnZhciBzdHlsZU1hcCQxID0ge1xuICBcImRpc3BsYXlcIjogU3R5bGUkMS5ESVNQTEFZLFxuICBcInRleHRcIjogU3R5bGUkMS5URVhULFxuICBcInNjcmlwdFwiOiBTdHlsZSQxLlNDUklQVCxcbiAgXCJzY3JpcHRzY3JpcHRcIjogU3R5bGUkMS5TQ1JJUFRTQ1JJUFRcbn07XG52YXIgRG9tRW51bSA9IHtcbiAgbW9yZDogXCJtb3JkXCIsXG4gIG1vcDogXCJtb3BcIixcbiAgbWJpbjogXCJtYmluXCIsXG4gIG1yZWw6IFwibXJlbFwiLFxuICBtb3BlbjogXCJtb3BlblwiLFxuICBtY2xvc2U6IFwibWNsb3NlXCIsXG4gIG1wdW5jdDogXCJtcHVuY3RcIixcbiAgbWlubmVyOiBcIm1pbm5lclwiXG59O1xuXG4vKipcbiAqIFRha2UgYSBsaXN0IG9mIG5vZGVzLCBidWlsZCB0aGVtIGluIG9yZGVyLCBhbmQgcmV0dXJuIGEgbGlzdCBvZiB0aGUgYnVpbHRcbiAqIG5vZGVzLiBkb2N1bWVudEZyYWdtZW50cyBhcmUgZmxhdHRlbmVkIGludG8gdGhlaXIgY29udGVudHMsIHNvIHRoZVxuICogcmV0dXJuZWQgbGlzdCBjb250YWlucyBubyBmcmFnbWVudHMuIGBpc1JlYWxHcm91cGAgaXMgdHJ1ZSBpZiBgZXhwcmVzc2lvbmBcbiAqIGlzIGEgcmVhbCBncm91cCAobm8gYXRvbXMgd2lsbCBiZSBhZGRlZCBvbiBlaXRoZXIgc2lkZSksIGFzIG9wcG9zZWQgdG9cbiAqIGEgcGFydGlhbCBncm91cCAoZS5nLiBvbmUgY3JlYXRlZCBieSBcXGNvbG9yKS4gYHN1cnJvdW5kaW5nYCBpcyBhbiBhcnJheVxuICogY29uc2lzdGluZyB0eXBlIG9mIG5vZGVzIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgbGVmdCBhbmQgcmlnaHQuXG4gKi9cbnZhciBidWlsZEV4cHJlc3Npb24kMSA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc1JlYWxHcm91cCwgc3Vycm91bmRpbmcpIHtcbiAgaWYgKHN1cnJvdW5kaW5nID09PSB2b2lkIDApIHtcbiAgICBzdXJyb3VuZGluZyA9IFtudWxsLCBudWxsXTtcbiAgfVxuXG4gIC8vIFBhcnNlIGV4cHJlc3Npb25zIGludG8gYGdyb3Vwc2AuXG4gIHZhciBncm91cHMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgb3V0cHV0ID0gYnVpbGRHcm91cCQxKGV4cHJlc3Npb25baV0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKG91dHB1dCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IG91dHB1dC5jaGlsZHJlbjtcbiAgICAgIGdyb3Vwcy5wdXNoKC4uLmNoaWxkcmVuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBzLnB1c2gob3V0cHV0KTtcbiAgICB9XG4gIH0gLy8gQ29tYmluZSBjb25zZWN1dGl2ZSBkb21UcmVlLnN5bWJvbE5vZGVzIGludG8gYSBzaW5nbGUgc3ltYm9sTm9kZS5cblxuXG4gIGJ1aWxkQ29tbW9uLnRyeUNvbWJpbmVDaGFycyhncm91cHMpOyAvLyBJZiBgZXhwcmVzc2lvbmAgaXMgYSBwYXJ0aWFsIGdyb3VwLCBsZXQgdGhlIHBhcmVudCBoYW5kbGUgc3BhY2luZ3NcbiAgLy8gdG8gYXZvaWQgcHJvY2Vzc2luZyBncm91cHMgbXVsdGlwbGUgdGltZXMuXG5cbiAgaWYgKCFpc1JlYWxHcm91cCkge1xuICAgIHJldHVybiBncm91cHM7XG4gIH1cblxuICB2YXIgZ2x1ZU9wdGlvbnMgPSBvcHRpb25zO1xuXG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBub2RlID0gZXhwcmVzc2lvblswXTtcblxuICAgIGlmIChub2RlLnR5cGUgPT09IFwic2l6aW5nXCIpIHtcbiAgICAgIGdsdWVPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTaXplKG5vZGUuc2l6ZSk7XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IFwic3R5bGluZ1wiKSB7XG4gICAgICBnbHVlT3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGVNYXAkMVtub2RlLnN0eWxlXSk7XG4gICAgfVxuICB9IC8vIER1bW15IHNwYW5zIGZvciBkZXRlcm1pbmluZyBzcGFjaW5ncyBiZXR3ZWVuIHN1cnJvdW5kaW5nIGF0b21zLlxuICAvLyBJZiBgZXhwcmVzc2lvbmAgaGFzIG5vIGF0b21zIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0LCBjbGFzcyBcImxlZnRtb3N0XCJcbiAgLy8gb3IgXCJyaWdodG1vc3RcIiwgcmVzcGVjdGl2ZWx5LCBpcyB1c2VkIHRvIGluZGljYXRlIGl0LlxuXG5cbiAgdmFyIGR1bW15UHJldiA9IG1ha2VTcGFuJDEoW3N1cnJvdW5kaW5nWzBdIHx8IFwibGVmdG1vc3RcIl0sIFtdLCBvcHRpb25zKTtcbiAgdmFyIGR1bW15TmV4dCA9IG1ha2VTcGFuJDEoW3N1cnJvdW5kaW5nWzFdIHx8IFwicmlnaHRtb3N0XCJdLCBbXSwgb3B0aW9ucyk7IC8vIFRPRE86IFRoZXNlIGNvZGUgYXNzdW1lcyB0aGF0IGEgbm9kZSdzIG1hdGggY2xhc3MgaXMgdGhlIGZpcnN0IGVsZW1lbnRcbiAgLy8gb2YgaXRzIGBjbGFzc2VzYCBhcnJheS4gQSBsYXRlciBjbGVhbnVwIHNob3VsZCBlbnN1cmUgdGhpcywgZm9yXG4gIC8vIGluc3RhbmNlIGJ5IGNoYW5naW5nIHRoZSBzaWduYXR1cmUgb2YgYG1ha2VTcGFuYC5cbiAgLy8gQmVmb3JlIGRldGVybWluaW5nIHdoYXQgc3BhY2VzIHRvIGluc2VydCwgcGVyZm9ybSBiaW4gY2FuY2VsbGF0aW9uLlxuICAvLyBCaW5hcnkgb3BlcmF0b3JzIGNoYW5nZSB0byBvcmRpbmFyeSBzeW1ib2xzIGluIHNvbWUgY29udGV4dHMuXG5cbiAgdmFyIGlzUm9vdCA9IGlzUmVhbEdyb3VwID09PSBcInJvb3RcIjtcbiAgdHJhdmVyc2VOb25TcGFjZU5vZGVzKGdyb3VwcywgKG5vZGUsIHByZXYpID0+IHtcbiAgICB2YXIgcHJldlR5cGUgPSBwcmV2LmNsYXNzZXNbMF07XG4gICAgdmFyIHR5cGUgPSBub2RlLmNsYXNzZXNbMF07XG5cbiAgICBpZiAocHJldlR5cGUgPT09IFwibWJpblwiICYmIHV0aWxzLmNvbnRhaW5zKGJpblJpZ2h0Q2FuY2VsbGVyLCB0eXBlKSkge1xuICAgICAgcHJldi5jbGFzc2VzWzBdID0gXCJtb3JkXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm1iaW5cIiAmJiB1dGlscy5jb250YWlucyhiaW5MZWZ0Q2FuY2VsbGVyLCBwcmV2VHlwZSkpIHtcbiAgICAgIG5vZGUuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIH1cbiAgfSwge1xuICAgIG5vZGU6IGR1bW15UHJldlxuICB9LCBkdW1teU5leHQsIGlzUm9vdCk7XG4gIHRyYXZlcnNlTm9uU3BhY2VOb2Rlcyhncm91cHMsIChub2RlLCBwcmV2KSA9PiB7XG4gICAgdmFyIHByZXZUeXBlID0gZ2V0VHlwZU9mRG9tVHJlZShwcmV2KTtcbiAgICB2YXIgdHlwZSA9IGdldFR5cGVPZkRvbVRyZWUobm9kZSk7IC8vICdtdGlnaHQnIGluZGljYXRlcyB0aGF0IHRoZSBub2RlIGlzIHNjcmlwdCBvciBzY3JpcHRzY3JpcHQgc3R5bGUuXG5cbiAgICB2YXIgc3BhY2UgPSBwcmV2VHlwZSAmJiB0eXBlID8gbm9kZS5oYXNDbGFzcyhcIm10aWdodFwiKSA/IHRpZ2h0U3BhY2luZ3NbcHJldlR5cGVdW3R5cGVdIDogc3BhY2luZ3NbcHJldlR5cGVdW3R5cGVdIDogbnVsbDtcblxuICAgIGlmIChzcGFjZSkge1xuICAgICAgLy8gSW5zZXJ0IGdsdWUgKHNwYWNpbmcpIGFmdGVyIHRoZSBgcHJldmAuXG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUdsdWUoc3BhY2UsIGdsdWVPcHRpb25zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBub2RlOiBkdW1teVByZXZcbiAgfSwgZHVtbXlOZXh0LCBpc1Jvb3QpO1xuICByZXR1cm4gZ3JvdXBzO1xufTsgLy8gRGVwdGgtZmlyc3QgdHJhdmVyc2Ugbm9uLXNwYWNlIGBub2Rlc2AsIGNhbGxpbmcgYGNhbGxiYWNrYCB3aXRoIHRoZSBjdXJyZW50IGFuZFxuLy8gcHJldmlvdXMgbm9kZSBhcyBhcmd1bWVudHMsIG9wdGlvbmFsbHkgcmV0dXJuaW5nIGEgbm9kZSB0byBpbnNlcnQgYWZ0ZXIgdGhlXG4vLyBwcmV2aW91cyBub2RlLiBgcHJldmAgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHByZXZpb3VzIG5vZGUgYW5kIGBpbnNlcnRBZnRlcmBcbi8vIGZ1bmN0aW9uIHRvIGluc2VydCBhZnRlciBpdC4gYG5leHRgIGlzIGEgbm9kZSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJpZ2h0LlxuLy8gVXNlZCBmb3IgYmluIGNhbmNlbGxhdGlvbiBhbmQgaW5zZXJ0aW5nIHNwYWNpbmdzLlxuXG52YXIgdHJhdmVyc2VOb25TcGFjZU5vZGVzID0gZnVuY3Rpb24gdHJhdmVyc2VOb25TcGFjZU5vZGVzKG5vZGVzLCBjYWxsYmFjaywgcHJldiwgbmV4dCwgaXNSb290KSB7XG4gIGlmIChuZXh0KSB7XG4gICAgLy8gdGVtcG9yYXJpbHkgYXBwZW5kIHRoZSByaWdodCBub2RlLCBpZiBleGlzdHNcbiAgICBub2Rlcy5wdXNoKG5leHQpO1xuICB9XG5cbiAgdmFyIGkgPSAwO1xuXG4gIGZvciAoOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgIHZhciBwYXJ0aWFsR3JvdXAgPSBjaGVja1BhcnRpYWxHcm91cChub2RlKTtcblxuICAgIGlmIChwYXJ0aWFsR3JvdXApIHtcbiAgICAgIC8vIFJlY3Vyc2l2ZSBERlNcbiAgICAgIC8vICRGbG93Rml4TWU6IG1ha2Ugbm9kZXMgYSAkUmVhZE9ubHlBcnJheSBieSByZXR1cm5pbmcgYSBuZXcgYXJyYXlcbiAgICAgIHRyYXZlcnNlTm9uU3BhY2VOb2RlcyhwYXJ0aWFsR3JvdXAuY2hpbGRyZW4sIGNhbGxiYWNrLCBwcmV2LCBudWxsLCBpc1Jvb3QpO1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBJZ25vcmUgZXhwbGljaXQgc3BhY2VzIChlLmcuLCBcXDssIFxcLCkgd2hlbiBkZXRlcm1pbmluZyB3aGF0IGltcGxpY2l0XG4gICAgLy8gc3BhY2luZyBzaG91bGQgZ28gYmV0d2VlbiBhdG9tcyBvZiBkaWZmZXJlbnQgY2xhc3Nlc1xuXG5cbiAgICB2YXIgbm9uc3BhY2UgPSAhbm9kZS5oYXNDbGFzcyhcIm1zcGFjZVwiKTtcblxuICAgIGlmIChub25zcGFjZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGNhbGxiYWNrKG5vZGUsIHByZXYubm9kZSk7XG5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgaWYgKHByZXYuaW5zZXJ0QWZ0ZXIpIHtcbiAgICAgICAgICBwcmV2Lmluc2VydEFmdGVyKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaW5zZXJ0IGF0IGZyb250XG4gICAgICAgICAgbm9kZXMudW5zaGlmdChyZXN1bHQpO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub25zcGFjZSkge1xuICAgICAgcHJldi5ub2RlID0gbm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzUm9vdCAmJiBub2RlLmhhc0NsYXNzKFwibmV3bGluZVwiKSkge1xuICAgICAgcHJldi5ub2RlID0gbWFrZVNwYW4kMShbXCJsZWZ0bW9zdFwiXSk7IC8vIHRyZWF0IGxpa2UgYmVnaW5uaW5nIG9mIGxpbmVcbiAgICB9XG5cbiAgICBwcmV2Lmluc2VydEFmdGVyID0gKGluZGV4ID0+IG4gPT4ge1xuICAgICAgbm9kZXMuc3BsaWNlKGluZGV4ICsgMSwgMCwgbik7XG4gICAgICBpKys7XG4gICAgfSkoaSk7XG4gIH1cblxuICBpZiAobmV4dCkge1xuICAgIG5vZGVzLnBvcCgpO1xuICB9XG59OyAvLyBDaGVjayBpZiBnaXZlbiBub2RlIGlzIGEgcGFydGlhbCBncm91cCwgaS5lLiwgZG9lcyBub3QgYWZmZWN0IHNwYWNpbmcgYXJvdW5kLlxuXG5cbnZhciBjaGVja1BhcnRpYWxHcm91cCA9IGZ1bmN0aW9uIGNoZWNrUGFydGlhbEdyb3VwKG5vZGUpIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBBbmNob3IgfHwgbm9kZSBpbnN0YW5jZW9mIFNwYW4gJiYgbm9kZS5oYXNDbGFzcyhcImVuY2xvc2luZ1wiKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59OyAvLyBSZXR1cm4gdGhlIG91dGVybW9zdCBub2RlIG9mIGEgZG9tVHJlZS5cblxuXG52YXIgZ2V0T3V0ZXJtb3N0Tm9kZSA9IGZ1bmN0aW9uIGdldE91dGVybW9zdE5vZGUobm9kZSwgc2lkZSkge1xuICB2YXIgcGFydGlhbEdyb3VwID0gY2hlY2tQYXJ0aWFsR3JvdXAobm9kZSk7XG5cbiAgaWYgKHBhcnRpYWxHcm91cCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHBhcnRpYWxHcm91cC5jaGlsZHJlbjtcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGlmIChzaWRlID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgcmV0dXJuIGdldE91dGVybW9zdE5vZGUoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0sIFwicmlnaHRcIik7XG4gICAgICB9IGVsc2UgaWYgKHNpZGUgPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHJldHVybiBnZXRPdXRlcm1vc3ROb2RlKGNoaWxkcmVuWzBdLCBcImxlZnRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59OyAvLyBSZXR1cm4gbWF0aCBhdG9tIGNsYXNzIChtY2xhc3MpIG9mIGEgZG9tVHJlZS5cbi8vIElmIGBzaWRlYCBpcyBnaXZlbiwgaXQgd2lsbCBnZXQgdGhlIHR5cGUgb2YgdGhlIG91dGVybW9zdCBub2RlIGF0IGdpdmVuIHNpZGUuXG5cblxudmFyIGdldFR5cGVPZkRvbVRyZWUgPSBmdW5jdGlvbiBnZXRUeXBlT2ZEb21UcmVlKG5vZGUsIHNpZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoc2lkZSkge1xuICAgIG5vZGUgPSBnZXRPdXRlcm1vc3ROb2RlKG5vZGUsIHNpZGUpO1xuICB9IC8vIFRoaXMgbWFrZXMgYSBsb3Qgb2YgYXNzdW1wdGlvbnMgYXMgdG8gd2hlcmUgdGhlIHR5cGUgb2YgYXRvbVxuICAvLyBhcHBlYXJzLiAgV2Ugc2hvdWxkIGRvIGEgYmV0dGVyIGpvYiBvZiBlbmZvcmNpbmcgdGhpcy5cblxuXG4gIHJldHVybiBEb21FbnVtW25vZGUuY2xhc3Nlc1swXV0gfHwgbnVsbDtcbn07XG52YXIgbWFrZU51bGxEZWxpbWl0ZXIgPSBmdW5jdGlvbiBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBjbGFzc2VzKSB7XG4gIHZhciBtb3JlQ2xhc3NlcyA9IFtcIm51bGxkZWxpbWl0ZXJcIl0uY29uY2F0KG9wdGlvbnMuYmFzZVNpemluZ0NsYXNzZXMoKSk7XG4gIHJldHVybiBtYWtlU3BhbiQxKGNsYXNzZXMuY29uY2F0KG1vcmVDbGFzc2VzKSk7XG59O1xuLyoqXG4gKiBidWlsZEdyb3VwIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgZ3JvdXAgYW5kIGNhbGxzIHRoZSBjb3JyZWN0IGdyb3VwVHlwZVxuICogZnVuY3Rpb24gZm9yIGl0LiBJdCBhbHNvIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIG9mIHNpemUgYW5kIHN0eWxlIGNoYW5nZXNcbiAqIGJldHdlZW4gcGFyZW50cyBhbmQgY2hpbGRyZW4uXG4gKi9cblxudmFyIGJ1aWxkR3JvdXAkMSA9IGZ1bmN0aW9uIGJ1aWxkR3JvdXAoZ3JvdXAsIG9wdGlvbnMsIGJhc2VPcHRpb25zKSB7XG4gIGlmICghZ3JvdXApIHtcbiAgICByZXR1cm4gbWFrZVNwYW4kMSgpO1xuICB9XG5cbiAgaWYgKF9odG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXSkge1xuICAgIC8vIENhbGwgdGhlIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25cbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdmFyIGdyb3VwTm9kZSA9IF9odG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXShncm91cCwgb3B0aW9ucyk7IC8vIElmIHRoZSBzaXplIGNoYW5nZWQgYmV0d2VlbiB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBncm91cCwgYWNjb3VudFxuICAgIC8vIGZvciB0aGF0IHNpemUgZGlmZmVyZW5jZS5cblxuICAgIGlmIChiYXNlT3B0aW9ucyAmJiBvcHRpb25zLnNpemUgIT09IGJhc2VPcHRpb25zLnNpemUpIHtcbiAgICAgIGdyb3VwTm9kZSA9IG1ha2VTcGFuJDEob3B0aW9ucy5zaXppbmdDbGFzc2VzKGJhc2VPcHRpb25zKSwgW2dyb3VwTm9kZV0sIG9wdGlvbnMpO1xuICAgICAgdmFyIG11bHRpcGxpZXIgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gYmFzZU9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgICBncm91cE5vZGUuaGVpZ2h0ICo9IG11bHRpcGxpZXI7XG4gICAgICBncm91cE5vZGUuZGVwdGggKj0gbXVsdGlwbGllcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXBOb2RlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiR290IGdyb3VwIG9mIHVua25vd24gdHlwZTogJ1wiICsgZ3JvdXAudHlwZSArIFwiJ1wiKTtcbiAgfVxufTtcbi8qKlxuICogQ29tYmluZSBhbiBhcnJheSBvZiBIVE1MIERPTSBub2RlcyAoZS5nLiwgdGhlIG91dHB1dCBvZiBgYnVpbGRFeHByZXNzaW9uYClcbiAqIGludG8gYW4gdW5icmVha2FibGUgSFRNTCBub2RlIG9mIGNsYXNzIC5iYXNlLCB3aXRoIHByb3BlciBzdHJ1dHMgdG9cbiAqIGd1YXJhbnRlZSBjb3JyZWN0IHZlcnRpY2FsIGV4dGVudC4gIGBidWlsZEhUTUxgIGNhbGxzIHRoaXMgcmVwZWF0ZWRseSB0b1xuICogbWFrZSB1cCB0aGUgZW50aXJlIGV4cHJlc3Npb24gYXMgYSBzZXF1ZW5jZSBvZiB1bmJyZWFrYWJsZSB1bml0cy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZEhUTUxVbmJyZWFrYWJsZShjaGlsZHJlbiwgb3B0aW9ucykge1xuICAvLyBDb21wdXRlIGhlaWdodCBhbmQgZGVwdGggb2YgdGhpcyBjaHVuay5cbiAgdmFyIGJvZHkgPSBtYWtlU3BhbiQxKFtcImJhc2VcIl0sIGNoaWxkcmVuLCBvcHRpb25zKTsgLy8gQWRkIHN0cnV0LCB3aGljaCBlbnN1cmVzIHRoYXQgdGhlIHRvcCBvZiB0aGUgSFRNTCBlbGVtZW50IGZhbGxzIGF0XG4gIC8vIHRoZSBoZWlnaHQgb2YgdGhlIGV4cHJlc3Npb24sIGFuZCB0aGUgYm90dG9tIG9mIHRoZSBIVE1MIGVsZW1lbnRcbiAgLy8gZmFsbHMgYXQgdGhlIGRlcHRoIG9mIHRoZSBleHByZXNzaW9uLlxuXG4gIHZhciBzdHJ1dCA9IG1ha2VTcGFuJDEoW1wic3RydXRcIl0pO1xuICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oYm9keS5oZWlnaHQgKyBib2R5LmRlcHRoKTtcblxuICBpZiAoYm9keS5kZXB0aCkge1xuICAgIHN0cnV0LnN0eWxlLnZlcnRpY2FsQWxpZ24gPSBtYWtlRW0oLWJvZHkuZGVwdGgpO1xuICB9XG5cbiAgYm9keS5jaGlsZHJlbi51bnNoaWZ0KHN0cnV0KTtcbiAgcmV0dXJuIGJvZHk7XG59XG4vKipcbiAqIFRha2UgYW4gZW50aXJlIHBhcnNlIHRyZWUsIGFuZCBidWlsZCBpdCBpbnRvIGFuIGFwcHJvcHJpYXRlIHNldCBvZiBIVE1MXG4gKiBub2Rlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJ1aWxkSFRNTCh0cmVlLCBvcHRpb25zKSB7XG4gIC8vIFN0cmlwIG9mZiBvdXRlciB0YWcgd3JhcHBlciBmb3IgcHJvY2Vzc2luZyBiZWxvdy5cbiAgdmFyIHRhZyA9IG51bGw7XG5cbiAgaWYgKHRyZWUubGVuZ3RoID09PSAxICYmIHRyZWVbMF0udHlwZSA9PT0gXCJ0YWdcIikge1xuICAgIHRhZyA9IHRyZWVbMF0udGFnO1xuICAgIHRyZWUgPSB0cmVlWzBdLmJvZHk7XG4gIH0gLy8gQnVpbGQgdGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGluIHRoZSB0cmVlXG5cblxuICB2YXIgZXhwcmVzc2lvbiA9IGJ1aWxkRXhwcmVzc2lvbiQxKHRyZWUsIG9wdGlvbnMsIFwicm9vdFwiKTtcbiAgdmFyIGVxbk51bTtcblxuICBpZiAoZXhwcmVzc2lvbi5sZW5ndGggPT09IDIgJiYgZXhwcmVzc2lvblsxXS5oYXNDbGFzcyhcInRhZ1wiKSkge1xuICAgIC8vIEFuIGVudmlyb25tZW50IHdpdGggYXV0b21hdGljIGVxdWF0aW9uIG51bWJlcnMsIGUuZy4ge2dhdGhlcn0uXG4gICAgZXFuTnVtID0gZXhwcmVzc2lvbi5wb3AoKTtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IFtdOyAvLyBDcmVhdGUgb25lIGJhc2Ugbm9kZSBmb3IgZWFjaCBjaHVuayBiZXR3ZWVuIHBvdGVudGlhbCBsaW5lIGJyZWFrcy5cbiAgLy8gVGhlIFRlWEJvb2sgW3AuMTczXSBzYXlzIFwiQSBmb3JtdWxhIHdpbGwgYmUgYnJva2VuIG9ubHkgYWZ0ZXIgYVxuICAvLyByZWxhdGlvbiBzeW1ib2wgbGlrZSAkPSQgb3IgJDwkIG9yICRcXHJpZ2h0YXJyb3ckLCBvciBhZnRlciBhIGJpbmFyeVxuICAvLyBvcGVyYXRpb24gc3ltYm9sIGxpa2UgJCskIG9yICQtJCBvciAkXFx0aW1lcyQsIHdoZXJlIHRoZSByZWxhdGlvbiBvclxuICAvLyBiaW5hcnkgb3BlcmF0aW9uIGlzIG9uIHRoZSBgYG91dGVyIGxldmVsJycgb2YgdGhlIGZvcm11bGEgKGkuZS4sIG5vdFxuICAvLyBlbmNsb3NlZCBpbiB7Li4ufSBhbmQgbm90IHBhcnQgb2YgYW4gXFxvdmVyIGNvbnN0cnVjdGlvbikuXCJcblxuICB2YXIgcGFydHMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICBwYXJ0cy5wdXNoKGV4cHJlc3Npb25baV0pO1xuXG4gICAgaWYgKGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJtYmluXCIpIHx8IGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJtcmVsXCIpIHx8IGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJhbGxvd2JyZWFrXCIpKSB7XG4gICAgICAvLyBQdXQgYW55IHBvc3Qtb3BlcmF0b3IgZ2x1ZSBvbiBzYW1lIGxpbmUgYXMgb3BlcmF0b3IuXG4gICAgICAvLyBXYXRjaCBmb3IgXFxub2JyZWFrIGFsb25nIHRoZSB3YXksIGFuZCBzdG9wIGF0IFxcbmV3bGluZS5cbiAgICAgIHZhciBub2JyZWFrID0gZmFsc2U7XG5cbiAgICAgIHdoaWxlIChpIDwgZXhwcmVzc2lvbi5sZW5ndGggLSAxICYmIGV4cHJlc3Npb25baSArIDFdLmhhc0NsYXNzKFwibXNwYWNlXCIpICYmICFleHByZXNzaW9uW2kgKyAxXS5oYXNDbGFzcyhcIm5ld2xpbmVcIikpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBwYXJ0cy5wdXNoKGV4cHJlc3Npb25baV0pO1xuXG4gICAgICAgIGlmIChleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibm9icmVha1wiKSkge1xuICAgICAgICAgIG5vYnJlYWsgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IC8vIERvbid0IGFsbG93IGJyZWFrIGlmIFxcbm9icmVhayBhbW9uZyB0aGUgcG9zdC1vcGVyYXRvciBnbHVlLlxuXG5cbiAgICAgIGlmICghbm9icmVhaykge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkSFRNTFVuYnJlYWthYmxlKHBhcnRzLCBvcHRpb25zKSk7XG4gICAgICAgIHBhcnRzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibmV3bGluZVwiKSkge1xuICAgICAgLy8gV3JpdGUgdGhlIGxpbmUgZXhjZXB0IHRoZSBuZXdsaW5lXG4gICAgICBwYXJ0cy5wb3AoKTtcblxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChidWlsZEhUTUxVbmJyZWFrYWJsZShwYXJ0cywgb3B0aW9ucykpO1xuICAgICAgICBwYXJ0cyA9IFtdO1xuICAgICAgfSAvLyBQdXQgdGhlIG5ld2xpbmUgYXQgdGhlIHRvcCBsZXZlbFxuXG5cbiAgICAgIGNoaWxkcmVuLnB1c2goZXhwcmVzc2lvbltpXSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkSFRNTFVuYnJlYWthYmxlKHBhcnRzLCBvcHRpb25zKSk7XG4gIH0gLy8gTm93LCBpZiB0aGVyZSB3YXMgYSB0YWcsIGJ1aWxkIGl0IHRvbyBhbmQgYXBwZW5kIGl0IGFzIGEgZmluYWwgY2hpbGQuXG5cblxuICB2YXIgdGFnQ2hpbGQ7XG5cbiAgaWYgKHRhZykge1xuICAgIHRhZ0NoaWxkID0gYnVpbGRIVE1MVW5icmVha2FibGUoYnVpbGRFeHByZXNzaW9uJDEodGFnLCBvcHRpb25zLCB0cnVlKSk7XG4gICAgdGFnQ2hpbGQuY2xhc3NlcyA9IFtcInRhZ1wiXTtcbiAgICBjaGlsZHJlbi5wdXNoKHRhZ0NoaWxkKTtcbiAgfSBlbHNlIGlmIChlcW5OdW0pIHtcbiAgICBjaGlsZHJlbi5wdXNoKGVxbk51bSk7XG4gIH1cblxuICB2YXIgaHRtbE5vZGUgPSBtYWtlU3BhbiQxKFtcImthdGV4LWh0bWxcIl0sIGNoaWxkcmVuKTtcbiAgaHRtbE5vZGUuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpOyAvLyBBZGp1c3QgdGhlIHN0cnV0IG9mIHRoZSB0YWcgdG8gYmUgdGhlIG1heGltdW0gaGVpZ2h0IG9mIGFsbCBjaGlsZHJlblxuICAvLyAodGhlIGhlaWdodCBvZiB0aGUgZW5jbG9zaW5nIGh0bWxOb2RlKSBmb3IgcHJvcGVyIHZlcnRpY2FsIGFsaWdubWVudC5cblxuICBpZiAodGFnQ2hpbGQpIHtcbiAgICB2YXIgc3RydXQgPSB0YWdDaGlsZC5jaGlsZHJlblswXTtcbiAgICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oaHRtbE5vZGUuaGVpZ2h0ICsgaHRtbE5vZGUuZGVwdGgpO1xuXG4gICAgaWYgKGh0bWxOb2RlLmRlcHRoKSB7XG4gICAgICBzdHJ1dC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1odG1sTm9kZS5kZXB0aCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGh0bWxOb2RlO1xufVxuXG4vKipcbiAqIFRoZXNlIG9iamVjdHMgc3RvcmUgZGF0YSBhYm91dCBNYXRoTUwgbm9kZXMuIFRoaXMgaXMgdGhlIE1hdGhNTCBlcXVpdmFsZW50XG4gKiBvZiB0aGUgdHlwZXMgaW4gZG9tVHJlZS5qcy4gU2luY2UgTWF0aE1MIGhhbmRsZXMgaXRzIG93biByZW5kZXJpbmcsIGFuZFxuICogc2luY2Ugd2UncmUgbWFpbmx5IHVzaW5nIE1hdGhNTCB0byBpbXByb3ZlIGFjY2Vzc2liaWxpdHksIHdlIGRvbid0IG1hbmFnZVxuICogYW55IG9mIHRoZSBzdHlsaW5nIHN0YXRlIHRoYXQgdGhlIHBsYWluIERPTSBub2RlcyBkby5cbiAqXG4gKiBUaGUgYHRvTm9kZWAgYW5kIGB0b01hcmt1cGAgZnVuY3Rpb25zIHdvcmsgc2ltaWxhcmx5IHRvIGhvdyB0aGV5IGRvIGluXG4gKiBkb21UcmVlLmpzLCBjcmVhdGluZyBuYW1lc3BhY2VkIERPTSBub2RlcyBhbmQgSFRNTCB0ZXh0IG1hcmt1cCByZXNwZWN0aXZlbHkuXG4gKi9cbmZ1bmN0aW9uIG5ld0RvY3VtZW50RnJhZ21lbnQoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIG5ldyBEb2N1bWVudEZyYWdtZW50KGNoaWxkcmVuKTtcbn1cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBnZW5lcmFsIHB1cnBvc2UgTWF0aE1MIG5vZGUgb2YgYW55IHR5cGUuIFRoZVxuICogY29uc3RydWN0b3IgcmVxdWlyZXMgdGhlIHR5cGUgb2Ygbm9kZSB0byBjcmVhdGUgKGZvciBleGFtcGxlLCBgXCJtb1wiYCBvclxuICogYFwibXNwYWNlXCJgLCBjb3JyZXNwb25kaW5nIHRvIGA8bW8+YCBhbmQgYDxtc3BhY2U+YCB0YWdzKS5cbiAqL1xuXG5jbGFzcyBNYXRoTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIGNoaWxkcmVuLCBjbGFzc2VzKSB7XG4gICAgdGhpcy50eXBlID0gdm9pZCAwO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmNsYXNzZXMgPSBjbGFzc2VzIHx8IFtdO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIGFuIGF0dHJpYnV0ZSBvbiBhIE1hdGhNTCBub2RlLiBNYXRoTUwgZGVwZW5kcyBvbiBhdHRyaWJ1dGVzIHRvIGNvbnZleSBhXG4gICAqIHNlbWFudGljIGNvbnRlbnQsIHNvIHRoaXMgaXMgdXNlZCBoZWF2aWx5LlxuICAgKi9cblxuXG4gIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMuYXR0cmlidXRlc1tuYW1lXSA9IHZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIGFuIGF0dHJpYnV0ZSBvbiBhIE1hdGhNTCBub2RlLlxuICAgKi9cblxuXG4gIGdldEF0dHJpYnV0ZShuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGEgTWF0aE1MLW5hbWVzcGFjZWQgRE9NIGVsZW1lbnQuXG4gICAqL1xuXG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLCB0aGlzLnR5cGUpO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgbm9kZS5jbGFzc05hbWUgPSBjcmVhdGVDbGFzcyh0aGlzLmNsYXNzZXMpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGFuIEhUTUwgbWFya3VwIHN0cmluZy5cbiAgICovXG5cblxuICB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8XCIgKyB0aGlzLnR5cGU7IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiO1xuICAgICAgICBtYXJrdXAgKz0gdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICAgIG1hcmt1cCArPSBcIlxcXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIG1hcmt1cCArPSBcIiBjbGFzcyA9XFxcIlwiICsgdXRpbHMuZXNjYXBlKGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3NlcykpICsgXCJcXFwiXCI7XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPlwiO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIjwvXCIgKyB0aGlzLnR5cGUgKyBcIj5cIjtcbiAgICByZXR1cm4gbWFya3VwO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYSBzdHJpbmcsIHNpbWlsYXIgdG8gaW5uZXJUZXh0LCBidXQgZXNjYXBlZC5cbiAgICovXG5cblxuICB0b1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKGNoaWxkID0+IGNoaWxkLnRvVGV4dCgpKS5qb2luKFwiXCIpO1xuICB9XG5cbn1cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBwaWVjZSBvZiB0ZXh0LlxuICovXG5cbmNsYXNzIFRleHROb2RlIHtcbiAgY29uc3RydWN0b3IodGV4dCkge1xuICAgIHRoaXMudGV4dCA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgdGV4dCBub2RlIGludG8gYSBET00gdGV4dCBub2RlLlxuICAgKi9cblxuXG4gIHRvTm9kZSgpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHQgbm9kZSBpbnRvIGVzY2FwZWQgSFRNTCBtYXJrdXBcbiAgICogKHJlcHJlc2VudGluZyB0aGUgdGV4dCBpdHNlbGYpLlxuICAgKi9cblxuXG4gIHRvTWFya3VwKCkge1xuICAgIHJldHVybiB1dGlscy5lc2NhcGUodGhpcy50b1RleHQoKSk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSB0ZXh0IG5vZGUgaW50byBhIHN0cmluZ1xuICAgKiAocmVwcmVzZW50aW5nIHRoZSB0ZXh0IGl0c2VsZikuXG4gICAqL1xuXG5cbiAgdG9UZXh0KCkge1xuICAgIHJldHVybiB0aGlzLnRleHQ7XG4gIH1cblxufVxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHNwYWNlLCBidXQgbWF5IHJlbmRlciBhcyA8bXNwYWNlLi4uLz4gb3IgYXMgdGV4dCxcbiAqIGRlcGVuZGluZyBvbiB0aGUgd2lkdGguXG4gKi9cblxuY2xhc3MgU3BhY2VOb2RlIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIFNwYWNlIG5vZGUgd2l0aCB3aWR0aCBnaXZlbiBpbiBDU1MgZW1zLlxuICAgKi9cbiAgY29uc3RydWN0b3Iod2lkdGgpIHtcbiAgICB0aGlzLndpZHRoID0gdm9pZCAwO1xuICAgIHRoaXMuY2hhcmFjdGVyID0gdm9pZCAwO1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDsgLy8gU2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAwL1dELU1hdGhNTDItMjAwMDAzMjgvY2hhcHRlcjYuaHRtbFxuICAgIC8vIGZvciBhIHRhYmxlIG9mIHNwYWNlLWxpa2UgY2hhcmFjdGVycy4gIFdlIHVzZSBVbmljb2RlXG4gICAgLy8gcmVwcmVzZW50YXRpb25zIGluc3RlYWQgb2YgJkxvbmdOYW1lczsgYXMgaXQncyBub3QgY2xlYXIgaG93IHRvXG4gICAgLy8gbWFrZSB0aGUgbGF0dGVyIHZpYSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZS5cblxuICAgIGlmICh3aWR0aCA+PSAwLjA1NTU1ICYmIHdpZHRoIDw9IDAuMDU1NTYpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDBhXCI7IC8vICZWZXJ5VGhpblNwYWNlO1xuICAgIH0gZWxzZSBpZiAod2lkdGggPj0gMC4xNjY2ICYmIHdpZHRoIDw9IDAuMTY2Nykge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMDlcIjsgLy8gJlRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IDAuMjIyMiAmJiB3aWR0aCA8PSAwLjIyMjMpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA1XCI7IC8vICZNZWRpdW1TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IDAuMjc3NyAmJiB3aWR0aCA8PSAwLjI3NzgpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA1XFx1MjAwYVwiOyAvLyAmVGhpY2tTcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjA1NTU2ICYmIHdpZHRoIDw9IC0wLjA1NTU1KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwYVxcdTIwNjNcIjsgLy8gJk5lZ2F0aXZlVmVyeVRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjE2NjcgJiYgd2lkdGggPD0gLTAuMTY2Nikge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMDlcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZVRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjIyMjMgJiYgd2lkdGggPD0gLTAuMjIyMikge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwNWZcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZU1lZGl1bVNwYWNlO1xuICAgIH0gZWxzZSBpZiAod2lkdGggPj0gLTAuMjc3OCAmJiB3aWR0aCA8PSAtMC4yNzc3KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwNVxcdTIwNjNcIjsgLy8gJk5lZ2F0aXZlVGhpY2tTcGFjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGEgTWF0aE1MLW5hbWVzcGFjZWQgRE9NIGVsZW1lbnQuXG4gICAqL1xuXG5cbiAgdG9Ob2RlKCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuY2hhcmFjdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIsIFwibXNwYWNlXCIpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBtYWtlRW0odGhpcy53aWR0aCkpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYW4gSFRNTCBtYXJrdXAgc3RyaW5nLlxuICAgKi9cblxuXG4gIHRvTWFya3VwKCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIFwiPG10ZXh0PlwiICsgdGhpcy5jaGFyYWN0ZXIgKyBcIjwvbXRleHQ+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIjxtc3BhY2Ugd2lkdGg9XFxcIlwiICsgbWFrZUVtKHRoaXMud2lkdGgpICsgXCJcXFwiLz5cIjtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQuXG4gICAqL1xuXG5cbiAgdG9UZXh0KCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY2hhcmFjdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCIgXCI7XG4gICAgfVxuICB9XG5cbn1cblxudmFyIG1hdGhNTFRyZWUgPSB7XG4gIE1hdGhOb2RlLFxuICBUZXh0Tm9kZSxcbiAgU3BhY2VOb2RlLFxuICBuZXdEb2N1bWVudEZyYWdtZW50XG59O1xuXG4vKipcbiAqIFRoaXMgZmlsZSBjb252ZXJ0cyBhIHBhcnNlIHRyZWUgaW50byBhIGNvcnJlc3BvbmRpbmcgTWF0aE1MIHRyZWUuIFRoZSBtYWluXG4gKiBlbnRyeSBwb2ludCBpcyB0aGUgYGJ1aWxkTWF0aE1MYCBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgYSBwYXJzZSB0cmVlIGZyb20gdGhlXG4gKiBwYXJzZXIuXG4gKi9cblxuLyoqXG4gKiBUYWtlcyBhIHN5bWJvbCBhbmQgY29udmVydHMgaXQgaW50byBhIE1hdGhNTCB0ZXh0IG5vZGUgYWZ0ZXIgcGVyZm9ybWluZ1xuICogb3B0aW9uYWwgcmVwbGFjZW1lbnQgZnJvbSBzeW1ib2xzLmpzLlxuICovXG52YXIgbWFrZVRleHQgPSBmdW5jdGlvbiBtYWtlVGV4dCh0ZXh0LCBtb2RlLCBvcHRpb25zKSB7XG4gIGlmIChzeW1ib2xzW21vZGVdW3RleHRdICYmIHN5bWJvbHNbbW9kZV1bdGV4dF0ucmVwbGFjZSAmJiB0ZXh0LmNoYXJDb2RlQXQoMCkgIT09IDB4RDgzNSAmJiAhKGxpZ2F0dXJlcy5oYXNPd25Qcm9wZXJ0eSh0ZXh0KSAmJiBvcHRpb25zICYmIChvcHRpb25zLmZvbnRGYW1pbHkgJiYgb3B0aW9ucy5mb250RmFtaWx5LnNsaWNlKDQsIDYpID09PSBcInR0XCIgfHwgb3B0aW9ucy5mb250ICYmIG9wdGlvbnMuZm9udC5zbGljZSg0LCA2KSA9PT0gXCJ0dFwiKSkpIHtcbiAgICB0ZXh0ID0gc3ltYm9sc1ttb2RlXVt0ZXh0XS5yZXBsYWNlO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLlRleHROb2RlKHRleHQpO1xufTtcbi8qKlxuICogV3JhcCB0aGUgZ2l2ZW4gYXJyYXkgb2Ygbm9kZXMgaW4gYW4gPG1yb3c+IG5vZGUgaWYgbmVlZGVkLCBpLmUuLFxuICogdW5sZXNzIHRoZSBhcnJheSBoYXMgbGVuZ3RoIDEuICBBbHdheXMgcmV0dXJucyBhIHNpbmdsZSBub2RlLlxuICovXG5cbnZhciBtYWtlUm93ID0gZnVuY3Rpb24gbWFrZVJvdyhib2R5KSB7XG4gIGlmIChib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBib2R5WzBdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb3dcIiwgYm9keSk7XG4gIH1cbn07XG4vKipcbiAqIFJldHVybnMgdGhlIG1hdGggdmFyaWFudCBhcyBhIHN0cmluZyBvciBudWxsIGlmIG5vbmUgaXMgcmVxdWlyZWQuXG4gKi9cblxudmFyIGdldFZhcmlhbnQgPSBmdW5jdGlvbiBnZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKSB7XG4gIC8vIEhhbmRsZSBcXHRleHQuLi4gZm9udCBzcGVjaWZpZXJzIGFzIGJlc3Qgd2UgY2FuLlxuICAvLyBNYXRoTUwgaGFzIGEgbGltaXRlZCBsaXN0IG9mIGFsbG93YWJsZSBtYXRodmFyaWFudCBzcGVjaWZpZXJzOyBzZWVcbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL01hdGhNTDMvY2hhcHRlcjMuaHRtbCNwcmVzbS5jb21tYXR0XG4gIGlmIChvcHRpb25zLmZvbnRGYW1pbHkgPT09IFwidGV4dHR0XCIpIHtcbiAgICByZXR1cm4gXCJtb25vc3BhY2VcIjtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRGYW1pbHkgPT09IFwidGV4dHNmXCIpIHtcbiAgICBpZiAob3B0aW9ucy5mb250U2hhcGUgPT09IFwidGV4dGl0XCIgJiYgb3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgICByZXR1cm4gXCJzYW5zLXNlcmlmLWJvbGQtaXRhbGljXCI7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIikge1xuICAgICAgcmV0dXJuIFwic2Fucy1zZXJpZi1pdGFsaWNcIjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgICAgcmV0dXJuIFwiYm9sZC1zYW5zLXNlcmlmXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcInNhbnMtc2VyaWZcIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5mb250U2hhcGUgPT09IFwidGV4dGl0XCIgJiYgb3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgcmV0dXJuIFwiYm9sZC1pdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIikge1xuICAgIHJldHVybiBcIml0YWxpY1wiO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgIHJldHVybiBcImJvbGRcIjtcbiAgfVxuXG4gIHZhciBmb250ID0gb3B0aW9ucy5mb250O1xuXG4gIGlmICghZm9udCB8fCBmb250ID09PSBcIm1hdGhub3JtYWxcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1vZGUgPSBncm91cC5tb2RlO1xuXG4gIGlmIChmb250ID09PSBcIm1hdGhpdFwiKSB7XG4gICAgcmV0dXJuIFwiaXRhbGljXCI7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJib2xkc3ltYm9sXCIpIHtcbiAgICByZXR1cm4gZ3JvdXAudHlwZSA9PT0gXCJ0ZXh0b3JkXCIgPyBcImJvbGRcIiA6IFwiYm9sZC1pdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhiZlwiKSB7XG4gICAgcmV0dXJuIFwiYm9sZFwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aGJiXCIpIHtcbiAgICByZXR1cm4gXCJkb3VibGUtc3RydWNrXCI7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJtYXRoZnJha1wiKSB7XG4gICAgcmV0dXJuIFwiZnJha3R1clwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aHNjclwiIHx8IGZvbnQgPT09IFwibWF0aGNhbFwiKSB7XG4gICAgLy8gTWF0aE1MIG1ha2VzIG5vIGRpc3RpbmN0aW9uIGJldHdlZW4gc2NyaXB0IGFuZCBjYWxsaWdyYXBoaWNcbiAgICByZXR1cm4gXCJzY3JpcHRcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhzZlwiKSB7XG4gICAgcmV0dXJuIFwic2Fucy1zZXJpZlwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aHR0XCIpIHtcbiAgICByZXR1cm4gXCJtb25vc3BhY2VcIjtcbiAgfVxuXG4gIHZhciB0ZXh0ID0gZ3JvdXAudGV4dDtcblxuICBpZiAodXRpbHMuY29udGFpbnMoW1wiXFxcXGltYXRoXCIsIFwiXFxcXGptYXRoXCJdLCB0ZXh0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHN5bWJvbHNbbW9kZV1bdGV4dF0gJiYgc3ltYm9sc1ttb2RlXVt0ZXh0XS5yZXBsYWNlKSB7XG4gICAgdGV4dCA9IHN5bWJvbHNbbW9kZV1bdGV4dF0ucmVwbGFjZTtcbiAgfVxuXG4gIHZhciBmb250TmFtZSA9IGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0uZm9udE5hbWU7XG5cbiAgaWYgKGdldENoYXJhY3Rlck1ldHJpY3ModGV4dCwgZm9udE5hbWUsIG1vZGUpKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0udmFyaWFudDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbi8qKlxuICogVGFrZXMgYSBsaXN0IG9mIG5vZGVzLCBidWlsZHMgdGhlbSwgYW5kIHJldHVybnMgYSBsaXN0IG9mIHRoZSBnZW5lcmF0ZWRcbiAqIE1hdGhNTCBub2Rlcy4gIEFsc28gY29tYmluZSBjb25zZWN1dGl2ZSA8bXRleHQ+IG91dHB1dHMgaW50byBhIHNpbmdsZVxuICogPG10ZXh0PiB0YWcuXG4gKi9cblxudmFyIGJ1aWxkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSB7XG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBncm91cCA9IGJ1aWxkR3JvdXAoZXhwcmVzc2lvblswXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoaXNPcmRncm91cCAmJiBncm91cCBpbnN0YW5jZW9mIE1hdGhOb2RlICYmIGdyb3VwLnR5cGUgPT09IFwibW9cIikge1xuICAgICAgLy8gV2hlbiBUZVggd3JpdGVycyB3YW50IHRvIHN1cHByZXNzIHNwYWNpbmcgb24gYW4gb3BlcmF0b3IsXG4gICAgICAvLyB0aGV5IG9mdGVuIHB1dCB0aGUgb3BlcmF0b3IgYnkgaXRzZWxmIGluc2lkZSBicmFjZXMuXG4gICAgICBncm91cC5zZXRBdHRyaWJ1dGUoXCJsc3BhY2VcIiwgXCIwZW1cIik7XG4gICAgICBncm91cC5zZXRBdHRyaWJ1dGUoXCJyc3BhY2VcIiwgXCIwZW1cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtncm91cF07XG4gIH1cblxuICB2YXIgZ3JvdXBzID0gW107XG4gIHZhciBsYXN0R3JvdXA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9ncm91cCA9IGJ1aWxkR3JvdXAoZXhwcmVzc2lvbltpXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoX2dyb3VwIGluc3RhbmNlb2YgTWF0aE5vZGUgJiYgbGFzdEdyb3VwIGluc3RhbmNlb2YgTWF0aE5vZGUpIHtcbiAgICAgIC8vIENvbmNhdGVuYXRlIGFkamFjZW50IDxtdGV4dD5zXG4gICAgICBpZiAoX2dyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgX2dyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSA9PT0gbGFzdEdyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSkge1xuICAgICAgICBsYXN0R3JvdXAuY2hpbGRyZW4ucHVzaCguLi5fZ3JvdXAuY2hpbGRyZW4pO1xuICAgICAgICBjb250aW51ZTsgLy8gQ29uY2F0ZW5hdGUgYWRqYWNlbnQgPG1uPnNcbiAgICAgIH0gZWxzZSBpZiAoX2dyb3VwLnR5cGUgPT09ICdtbicgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtbicpIHtcbiAgICAgICAgbGFzdEdyb3VwLmNoaWxkcmVuLnB1c2goLi4uX2dyb3VwLmNoaWxkcmVuKTtcbiAgICAgICAgY29udGludWU7IC8vIENvbmNhdGVuYXRlIDxtbj4uLi48L21uPiBmb2xsb3dlZCBieSA8bWk+LjwvbWk+XG4gICAgICB9IGVsc2UgaWYgKF9ncm91cC50eXBlID09PSAnbWknICYmIF9ncm91cC5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtbicpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gX2dyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFRleHROb2RlICYmIGNoaWxkLnRleHQgPT09ICcuJykge1xuICAgICAgICAgIGxhc3RHcm91cC5jaGlsZHJlbi5wdXNoKC4uLl9ncm91cC5jaGlsZHJlbik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobGFzdEdyb3VwLnR5cGUgPT09ICdtaScgJiYgbGFzdEdyb3VwLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgbGFzdENoaWxkID0gbGFzdEdyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgIGlmIChsYXN0Q2hpbGQgaW5zdGFuY2VvZiBUZXh0Tm9kZSAmJiBsYXN0Q2hpbGQudGV4dCA9PT0gJ1xcdTAzMzgnICYmIChfZ3JvdXAudHlwZSA9PT0gJ21vJyB8fCBfZ3JvdXAudHlwZSA9PT0gJ21pJyB8fCBfZ3JvdXAudHlwZSA9PT0gJ21uJykpIHtcbiAgICAgICAgICB2YXIgX2NoaWxkID0gX2dyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgICAgaWYgKF9jaGlsZCBpbnN0YW5jZW9mIFRleHROb2RlICYmIF9jaGlsZC50ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIE92ZXJsYXkgd2l0aCBjb21iaW5pbmcgY2hhcmFjdGVyIGxvbmcgc29saWR1c1xuICAgICAgICAgICAgX2NoaWxkLnRleHQgPSBfY2hpbGQudGV4dC5zbGljZSgwLCAxKSArIFwiXFx1MDMzOFwiICsgX2NoaWxkLnRleHQuc2xpY2UoMSk7XG4gICAgICAgICAgICBncm91cHMucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ3JvdXBzLnB1c2goX2dyb3VwKTtcbiAgICBsYXN0R3JvdXAgPSBfZ3JvdXA7XG4gIH1cblxuICByZXR1cm4gZ3JvdXBzO1xufTtcbi8qKlxuICogRXF1aXZhbGVudCB0byBidWlsZEV4cHJlc3Npb24sIGJ1dCB3cmFwcyB0aGUgZWxlbWVudHMgaW4gYW4gPG1yb3c+XG4gKiBpZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUuICBSZXR1cm5zIGEgc2luZ2xlIG5vZGUgaW5zdGVhZCBvZiBhbiBhcnJheS5cbiAqL1xuXG52YXIgYnVpbGRFeHByZXNzaW9uUm93ID0gZnVuY3Rpb24gYnVpbGRFeHByZXNzaW9uUm93KGV4cHJlc3Npb24sIG9wdGlvbnMsIGlzT3JkZ3JvdXApIHtcbiAgcmV0dXJuIG1ha2VSb3coYnVpbGRFeHByZXNzaW9uKGV4cHJlc3Npb24sIG9wdGlvbnMsIGlzT3JkZ3JvdXApKTtcbn07XG4vKipcbiAqIFRha2VzIGEgZ3JvdXAgZnJvbSB0aGUgcGFyc2VyIGFuZCBjYWxscyB0aGUgYXBwcm9wcmlhdGUgZ3JvdXBCdWlsZGVycyBmdW5jdGlvblxuICogb24gaXQgdG8gcHJvZHVjZSBhIE1hdGhNTCBub2RlLlxuICovXG5cbnZhciBidWlsZEdyb3VwID0gZnVuY3Rpb24gYnVpbGRHcm91cChncm91cCwgb3B0aW9ucykge1xuICBpZiAoIWdyb3VwKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiKTtcbiAgfVxuXG4gIGlmIChfbWF0aG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXSkge1xuICAgIC8vIENhbGwgdGhlIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25cbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdmFyIHJlc3VsdCA9IF9tYXRobWxHcm91cEJ1aWxkZXJzW2dyb3VwLnR5cGVdKGdyb3VwLCBvcHRpb25zKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkdvdCBncm91cCBvZiB1bmtub3duIHR5cGU6ICdcIiArIGdyb3VwLnR5cGUgKyBcIidcIik7XG4gIH1cbn07XG4vKipcbiAqIFRha2VzIGEgZnVsbCBwYXJzZSB0cmVlIGFuZCBzZXR0aW5ncyBhbmQgYnVpbGRzIGEgTWF0aE1MIHJlcHJlc2VudGF0aW9uIG9mXG4gKiBpdC4gSW4gcGFydGljdWxhciwgd2UgcHV0IHRoZSBlbGVtZW50cyBmcm9tIGJ1aWxkaW5nIHRoZSBwYXJzZSB0cmVlIGludG8gYVxuICogPHNlbWFudGljcz4gdGFnIHNvIHdlIGNhbiBhbHNvIGluY2x1ZGUgdGhhdCBUZVggc291cmNlIGFzIGFuIGFubm90YXRpb24uXG4gKlxuICogTm90ZSB0aGF0IHdlIGFjdHVhbGx5IHJldHVybiBhIGRvbVRyZWUgZWxlbWVudCB3aXRoIGEgYDxtYXRoPmAgaW5zaWRlIGl0IHNvXG4gKiB3ZSBjYW4gZG8gYXBwcm9wcmlhdGUgc3R5bGluZy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZE1hdGhNTCh0cmVlLCB0ZXhFeHByZXNzaW9uLCBvcHRpb25zLCBpc0Rpc3BsYXlNb2RlLCBmb3JNYXRobWxPbmx5KSB7XG4gIHZhciBleHByZXNzaW9uID0gYnVpbGRFeHByZXNzaW9uKHRyZWUsIG9wdGlvbnMpOyAvLyBUT0RPOiBNYWtlIGEgcGFzcyB0aHJ1IHRoZSBNYXRoTUwgc2ltaWxhciB0byBidWlsZEhUTUwudHJhdmVyc2VOb25TcGFjZU5vZGVzXG4gIC8vIGFuZCBhZGQgc3BhY2luZyBub2Rlcy4gVGhpcyBpcyBuZWNlc3Nhcnkgb25seSBhZGphY2VudCB0byBtYXRoIG9wZXJhdG9yc1xuICAvLyBsaWtlIFxcc2luIG9yIFxcbGltIG9yIHRvIHN1YnN1cCBlbGVtZW50cyB0aGF0IGNvbnRhaW4gbWF0aCBvcGVyYXRvcnMuXG4gIC8vIE1hdGhNTCB0YWtlcyBjYXJlIG9mIHRoZSBvdGhlciBzcGFjaW5nIGlzc3Vlcy5cbiAgLy8gV3JhcCB1cCB0aGUgZXhwcmVzc2lvbiBpbiBhbiBtcm93IHNvIGl0IGlzIHByZXNlbnRlZCBpbiB0aGUgc2VtYW50aWNzXG4gIC8vIHRhZyBjb3JyZWN0bHksIHVubGVzcyBpdCdzIGEgc2luZ2xlIDxtcm93PiBvciA8bXRhYmxlPi5cblxuICB2YXIgd3JhcHBlcjtcblxuICBpZiAoZXhwcmVzc2lvbi5sZW5ndGggPT09IDEgJiYgZXhwcmVzc2lvblswXSBpbnN0YW5jZW9mIE1hdGhOb2RlICYmIHV0aWxzLmNvbnRhaW5zKFtcIm1yb3dcIiwgXCJtdGFibGVcIl0sIGV4cHJlc3Npb25bMF0udHlwZSkpIHtcbiAgICB3cmFwcGVyID0gZXhwcmVzc2lvblswXTtcbiAgfSBlbHNlIHtcbiAgICB3cmFwcGVyID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcm93XCIsIGV4cHJlc3Npb24pO1xuICB9IC8vIEJ1aWxkIGEgVGVYIGFubm90YXRpb24gb2YgdGhlIHNvdXJjZVxuXG5cbiAgdmFyIGFubm90YXRpb24gPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcImFubm90YXRpb25cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKHRleEV4cHJlc3Npb24pXSk7XG4gIGFubm90YXRpb24uc2V0QXR0cmlidXRlKFwiZW5jb2RpbmdcIiwgXCJhcHBsaWNhdGlvbi94LXRleFwiKTtcbiAgdmFyIHNlbWFudGljcyA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwic2VtYW50aWNzXCIsIFt3cmFwcGVyLCBhbm5vdGF0aW9uXSk7XG4gIHZhciBtYXRoID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtYXRoXCIsIFtzZW1hbnRpY3NdKTtcbiAgbWF0aC5zZXRBdHRyaWJ1dGUoXCJ4bWxuc1wiLCBcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIik7XG5cbiAgaWYgKGlzRGlzcGxheU1vZGUpIHtcbiAgICBtYXRoLnNldEF0dHJpYnV0ZShcImRpc3BsYXlcIiwgXCJibG9ja1wiKTtcbiAgfSAvLyBZb3UgY2FuJ3Qgc3R5bGUgPG1hdGg+IG5vZGVzLCBzbyB3ZSB3cmFwIHRoZSBub2RlIGluIGEgc3Bhbi5cbiAgLy8gTk9URTogVGhlIHNwYW4gY2xhc3MgaXMgbm90IHR5cGVkIHRvIGhhdmUgPG1hdGg+IG5vZGVzIGFzIGNoaWxkcmVuLCBhbmRcbiAgLy8gd2UgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZSBjaGlsZHJlbiB0eXBlIG1vcmUgZ2VuZXJpYyBzaW5jZSB0aGUgY2hpbGRyZW5cbiAgLy8gb2Ygc3BhbiBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSBtb3JlIGZpZWxkcyBpbiBgYnVpbGRIdG1sYCBjb250ZXh0cy5cblxuXG4gIHZhciB3cmFwcGVyQ2xhc3MgPSBmb3JNYXRobWxPbmx5ID8gXCJrYXRleFwiIDogXCJrYXRleC1tYXRobWxcIjsgLy8gJEZsb3dGaXhNZVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3Bhbihbd3JhcHBlckNsYXNzXSwgW21hdGhdKTtcbn1cblxudmFyIG9wdGlvbnNGcm9tU2V0dGluZ3MgPSBmdW5jdGlvbiBvcHRpb25zRnJvbVNldHRpbmdzKHNldHRpbmdzKSB7XG4gIHJldHVybiBuZXcgT3B0aW9ucyh7XG4gICAgc3R5bGU6IHNldHRpbmdzLmRpc3BsYXlNb2RlID8gU3R5bGUkMS5ESVNQTEFZIDogU3R5bGUkMS5URVhULFxuICAgIG1heFNpemU6IHNldHRpbmdzLm1heFNpemUsXG4gICAgbWluUnVsZVRoaWNrbmVzczogc2V0dGluZ3MubWluUnVsZVRoaWNrbmVzc1xuICB9KTtcbn07XG5cbnZhciBkaXNwbGF5V3JhcCA9IGZ1bmN0aW9uIGRpc3BsYXlXcmFwKG5vZGUsIHNldHRpbmdzKSB7XG4gIGlmIChzZXR0aW5ncy5kaXNwbGF5TW9kZSkge1xuICAgIHZhciBjbGFzc2VzID0gW1wia2F0ZXgtZGlzcGxheVwiXTtcblxuICAgIGlmIChzZXR0aW5ncy5sZXFubykge1xuICAgICAgY2xhc3Nlcy5wdXNoKFwibGVxbm9cIik7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzLmZsZXFuKSB7XG4gICAgICBjbGFzc2VzLnB1c2goXCJmbGVxblwiKTtcbiAgICB9XG5cbiAgICBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oY2xhc3NlcywgW25vZGVdKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcblxudmFyIGJ1aWxkVHJlZSA9IGZ1bmN0aW9uIGJ1aWxkVHJlZSh0cmVlLCBleHByZXNzaW9uLCBzZXR0aW5ncykge1xuICB2YXIgb3B0aW9ucyA9IG9wdGlvbnNGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICB2YXIga2F0ZXhOb2RlO1xuXG4gIGlmIChzZXR0aW5ncy5vdXRwdXQgPT09IFwibWF0aG1sXCIpIHtcbiAgICByZXR1cm4gYnVpbGRNYXRoTUwodHJlZSwgZXhwcmVzc2lvbiwgb3B0aW9ucywgc2V0dGluZ3MuZGlzcGxheU1vZGUsIHRydWUpO1xuICB9IGVsc2UgaWYgKHNldHRpbmdzLm91dHB1dCA9PT0gXCJodG1sXCIpIHtcbiAgICB2YXIgaHRtbE5vZGUgPSBidWlsZEhUTUwodHJlZSwgb3B0aW9ucyk7XG4gICAga2F0ZXhOb2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXhcIl0sIFtodG1sTm9kZV0pO1xuICB9IGVsc2Uge1xuICAgIHZhciBtYXRoTUxOb2RlID0gYnVpbGRNYXRoTUwodHJlZSwgZXhwcmVzc2lvbiwgb3B0aW9ucywgc2V0dGluZ3MuZGlzcGxheU1vZGUsIGZhbHNlKTtcblxuICAgIHZhciBfaHRtbE5vZGUgPSBidWlsZEhUTUwodHJlZSwgb3B0aW9ucyk7XG5cbiAgICBrYXRleE5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJrYXRleFwiXSwgW21hdGhNTE5vZGUsIF9odG1sTm9kZV0pO1xuICB9XG5cbiAgcmV0dXJuIGRpc3BsYXlXcmFwKGthdGV4Tm9kZSwgc2V0dGluZ3MpO1xufTtcbnZhciBidWlsZEhUTUxUcmVlID0gZnVuY3Rpb24gYnVpbGRIVE1MVHJlZSh0cmVlLCBleHByZXNzaW9uLCBzZXR0aW5ncykge1xuICB2YXIgb3B0aW9ucyA9IG9wdGlvbnNGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICB2YXIgaHRtbE5vZGUgPSBidWlsZEhUTUwodHJlZSwgb3B0aW9ucyk7XG4gIHZhciBrYXRleE5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJrYXRleFwiXSwgW2h0bWxOb2RlXSk7XG4gIHJldHVybiBkaXNwbGF5V3JhcChrYXRleE5vZGUsIHNldHRpbmdzKTtcbn07XG5cbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgdG8gYnVpbGRNYXRoTUwuanMgYW5kIGJ1aWxkSFRNTC5qc1xuICogZm9yIHN0cmV0Y2h5IHdpZGUgZWxlbWVudHMgcmVuZGVyZWQgZnJvbSBTVkcgZmlsZXNcbiAqIGFuZCBvdGhlciBDU1MgdHJpY2tlcnkuXG4gKi9cbnZhciBzdHJldGNoeUNvZGVQb2ludCA9IHtcbiAgd2lkZWhhdDogXCJeXCIsXG4gIHdpZGVjaGVjazogXCLLh1wiLFxuICB3aWRldGlsZGU6IFwiflwiLFxuICB1dGlsZGU6IFwiflwiLFxuICBvdmVybGVmdGFycm93OiBcIlxcdTIxOTBcIixcbiAgdW5kZXJsZWZ0YXJyb3c6IFwiXFx1MjE5MFwiLFxuICB4bGVmdGFycm93OiBcIlxcdTIxOTBcIixcbiAgb3ZlcnJpZ2h0YXJyb3c6IFwiXFx1MjE5MlwiLFxuICB1bmRlcnJpZ2h0YXJyb3c6IFwiXFx1MjE5MlwiLFxuICB4cmlnaHRhcnJvdzogXCJcXHUyMTkyXCIsXG4gIHVuZGVyYnJhY2U6IFwiXFx1MjNkZlwiLFxuICBvdmVyYnJhY2U6IFwiXFx1MjNkZVwiLFxuICBvdmVyZ3JvdXA6IFwiXFx1MjNlMFwiLFxuICB1bmRlcmdyb3VwOiBcIlxcdTIzZTFcIixcbiAgb3ZlcmxlZnRyaWdodGFycm93OiBcIlxcdTIxOTRcIixcbiAgdW5kZXJsZWZ0cmlnaHRhcnJvdzogXCJcXHUyMTk0XCIsXG4gIHhsZWZ0cmlnaHRhcnJvdzogXCJcXHUyMTk0XCIsXG4gIE92ZXJyaWdodGFycm93OiBcIlxcdTIxZDJcIixcbiAgeFJpZ2h0YXJyb3c6IFwiXFx1MjFkMlwiLFxuICBvdmVybGVmdGhhcnBvb246IFwiXFx1MjFiY1wiLFxuICB4bGVmdGhhcnBvb251cDogXCJcXHUyMWJjXCIsXG4gIG92ZXJyaWdodGhhcnBvb246IFwiXFx1MjFjMFwiLFxuICB4cmlnaHRoYXJwb29udXA6IFwiXFx1MjFjMFwiLFxuICB4TGVmdGFycm93OiBcIlxcdTIxZDBcIixcbiAgeExlZnRyaWdodGFycm93OiBcIlxcdTIxZDRcIixcbiAgeGhvb2tsZWZ0YXJyb3c6IFwiXFx1MjFhOVwiLFxuICB4aG9va3JpZ2h0YXJyb3c6IFwiXFx1MjFhYVwiLFxuICB4bWFwc3RvOiBcIlxcdTIxYTZcIixcbiAgeHJpZ2h0aGFycG9vbmRvd246IFwiXFx1MjFjMVwiLFxuICB4bGVmdGhhcnBvb25kb3duOiBcIlxcdTIxYmRcIixcbiAgeHJpZ2h0bGVmdGhhcnBvb25zOiBcIlxcdTIxY2NcIixcbiAgeGxlZnRyaWdodGhhcnBvb25zOiBcIlxcdTIxY2JcIixcbiAgeHR3b2hlYWRsZWZ0YXJyb3c6IFwiXFx1MjE5ZVwiLFxuICB4dHdvaGVhZHJpZ2h0YXJyb3c6IFwiXFx1MjFhMFwiLFxuICB4bG9uZ2VxdWFsOiBcIj1cIixcbiAgeHRvZnJvbTogXCJcXHUyMWM0XCIsXG4gIHhyaWdodGxlZnRhcnJvd3M6IFwiXFx1MjFjNFwiLFxuICB4cmlnaHRlcXVpbGlicml1bTogXCJcXHUyMWNjXCIsXG4gIC8vIE5vdCBhIHBlcmZlY3QgbWF0Y2guXG4gIHhsZWZ0ZXF1aWxpYnJpdW06IFwiXFx1MjFjYlwiLFxuICAvLyBOb25lIGJldHRlciBhdmFpbGFibGUuXG4gIFwiXFxcXGNkcmlnaHRhcnJvd1wiOiBcIlxcdTIxOTJcIixcbiAgXCJcXFxcY2RsZWZ0YXJyb3dcIjogXCJcXHUyMTkwXCIsXG4gIFwiXFxcXGNkbG9uZ2VxdWFsXCI6IFwiPVwiXG59O1xuXG52YXIgbWF0aE1Mbm9kZSA9IGZ1bmN0aW9uIG1hdGhNTG5vZGUobGFiZWwpIHtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShzdHJldGNoeUNvZGVQb2ludFtsYWJlbC5yZXBsYWNlKC9eXFxcXC8sICcnKV0pXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07IC8vIE1hbnkgb2YgdGhlIEthVGVYIFNWRyBpbWFnZXMgaGF2ZSBiZWVuIGFkYXB0ZWQgZnJvbSBnbHlwaHMgaW4gS2FUZVggZm9udHMuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCwgRGVzaWduIFNjaWVuY2UsIEluYy4gKDx3d3cubWF0aGpheC5vcmc+KVxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcgS2hhbiBBY2FkZW15ICg8d3d3LmtoYW5hY2FkZW15Lm9yZz4pXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlLCBWZXJzaW9uIDEuMS5cbi8vIFNlZSBcXG5odHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTFxuLy8gVmVyeSBMb25nIFNWR3Ncbi8vICAgIE1hbnkgb2YgdGhlIEthVGVYIHN0cmV0Y2h5IHdpZGUgZWxlbWVudHMgdXNlIGEgbG9uZyBTVkcgaW1hZ2UgYW5kIGFuXG4vLyAgICBvdmVyZmxvdzogaGlkZGVuIHRhY3RpYyB0byBhY2hpZXZlIGEgc3RyZXRjaHkgaW1hZ2Ugd2hpbGUgYXZvaWRpbmdcbi8vICAgIGRpc3RvcnRpb24gb2YgYXJyb3doZWFkcyBvciBicmFjZSBjb3JuZXJzLlxuLy8gICAgVGhlIFNWRyB0eXBpY2FsbHkgY29udGFpbnMgYSB2ZXJ5IGxvbmcgKDQwMCBlbSkgYXJyb3cuXG4vLyAgICBUaGUgU1ZHIGlzIGluIGEgY29udGFpbmVyIHNwYW4gdGhhdCBoYXMgb3ZlcmZsb3c6IGhpZGRlbiwgc28gdGhlIHNwYW5cbi8vICAgIGFjdHMgbGlrZSBhIHdpbmRvdyB0aGF0IGV4cG9zZXMgb25seSBwYXJ0IG9mIHRoZSAgU1ZHLlxuLy8gICAgVGhlIFNWRyBhbHdheXMgaGFzIGEgbG9uZ2VyLCB0aGlubmVyIGFzcGVjdCByYXRpbyB0aGFuIHRoZSBjb250YWluZXIgc3Bhbi5cbi8vICAgIEFmdGVyIHRoZSBTVkcgZmlsbHMgMTAwJSBvZiB0aGUgaGVpZ2h0IG9mIHRoZSBjb250YWluZXIgc3Bhbixcbi8vICAgIHRoZXJlIGlzIGEgbG9uZyBhcnJvdyBzaGFmdCBsZWZ0IG92ZXIuIFRoYXQgbGVmdC1vdmVyIHNoYWZ0IGlzIG5vdCBzaG93bi5cbi8vICAgIEluc3RlYWQsIGl0IGlzIHNsaWNlZCBvZmYgYmVjYXVzZSB0aGUgc3BhbidzIENTUyBoYXMgb3ZlcmZsb3c6IGhpZGRlbi5cbi8vICAgIFRodXMsIHRoZSByZWFkZXIgc2VlcyBhbiBhcnJvdyB0aGF0IG1hdGNoZXMgdGhlIHN1YmplY3QgbWF0dGVyIHdpZHRoXG4vLyAgICB3aXRob3V0IGRpc3RvcnRpb24uXG4vLyAgICBTb21lIGZ1bmN0aW9ucywgc3VjaCBhcyBcXGNhbmNlbCwgbmVlZCB0byB2YXJ5IHRoZWlyIGFzcGVjdCByYXRpby4gVGhlc2Vcbi8vICAgIGZ1bmN0aW9ucyBkbyBub3QgZ2V0IHRoZSBvdmVyZmxvdyBTVkcgdHJlYXRtZW50LlxuLy8gU2Vjb25kIEJydXNoIFN0cm9rZVxuLy8gICAgTG93IHJlc29sdXRpb24gbW9uaXRvcnMgc3RydWdnbGUgdG8gZGlzcGxheSBpbWFnZXMgaW4gZmluZSBkZXRhaWwuXG4vLyAgICBTbyBicm93c2VycyBhcHBseSBhbnRpLWFsaWFzaW5nLiBBIGxvbmcgc3RyYWlnaHQgYXJyb3cgc2hhZnQgdGhlcmVmb3JlXG4vLyAgICB3aWxsIHNvbWV0aW1lcyBhcHBlYXIgYXMgaWYgaXQgaGFzIGEgYmx1cnJlZCBlZGdlLlxuLy8gICAgVG8gbWl0aWdhdGUgdGhpcywgdGhlc2UgU1ZHIGZpbGVzIGNvbnRhaW4gYSBzZWNvbmQgXCJicnVzaC1zdHJva2VcIiBvbiB0aGVcbi8vICAgIGFycm93IHNoYWZ0cy4gVGhhdCBpcywgYSBzZWNvbmQgbG9uZyB0aGluIHJlY3Rhbmd1bGFyIFNWRyBwYXRoIGhhcyBiZWVuXG4vLyAgICB3cml0dGVuIGRpcmVjdGx5IG9uIHRvcCBvZiBlYWNoIGFycm93IHNoYWZ0LiBUaGlzIHJlaW5mb3JjZW1lbnQgY2F1c2VzXG4vLyAgICBzb21lIG9mIHRoZSBzY3JlZW4gcGl4ZWxzIHRvIGRpc3BsYXkgYXMgYmxhY2sgaW5zdGVhZCBvZiB0aGUgYW50aS1hbGlhc2VkXG4vLyAgICBncmF5IHBpeGVsIHRoYXQgYSAgc2luZ2xlIHBhdGggd291bGQgZ2VuZXJhdGUuIFNvIHdlIGdldCBhcnJvdyBzaGFmdHNcbi8vICAgIHdob3NlIGVkZ2VzIGFwcGVhciB0byBiZSBzaGFycGVyLlxuLy8gSW4gdGhlIGthdGV4SW1hZ2VzRGF0YSBvYmplY3QganVzdCBiZWxvdywgdGhlIGRpbWVuc2lvbnMgYWxsXG4vLyBjb3JyZXNwb25kIHRvIHBhdGggZ2VvbWV0cnkgaW5zaWRlIHRoZSByZWxldmFudCBTVkcuXG4vLyBGb3IgZXhhbXBsZSwgXFxvdmVycmlnaHRhcnJvdyB1c2VzIHRoZSBzYW1lIGFycm93aGVhZCBhcyBnbHlwaCBVKzIxOTJcbi8vIGZyb20gdGhlIEthVGVYIE1haW4gZm9udC4gVGhlIHNjYWxpbmcgZmFjdG9yIGlzIDEwMDAuXG4vLyBUaGF0IGlzLCBpbnNpZGUgdGhlIGZvbnQsIHRoYXQgYXJyb3doZWFkIGlzIDUyMiB1bml0cyB0YWxsLCB3aGljaFxuLy8gY29ycmVzcG9uZHMgdG8gMC41MjIgZW0gaW5zaWRlIHRoZSBkb2N1bWVudC5cblxuXG52YXIga2F0ZXhJbWFnZXNEYXRhID0ge1xuICAvLyAgIHBhdGgocyksIG1pbldpZHRoLCBoZWlnaHQsIGFsaWduXG4gIG92ZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgb3ZlcmxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgdW5kZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgdW5kZXJsZWZ0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIl0sIDAuODg4LCA1MjIsIFwieE1pbllNaW5cIl0sXG4gIHhyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgXCJcXFxcY2RyaWdodGFycm93XCI6IFtbXCJyaWdodGFycm93XCJdLCAzLjAsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgLy8gQ0QgbWlud3dpZHRoMi41cGNcbiAgeGxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgXCJcXFxcY2RsZWZ0YXJyb3dcIjogW1tcImxlZnRhcnJvd1wiXSwgMy4wLCA1MjIsIFwieE1pbllNaW5cIl0sXG4gIE92ZXJyaWdodGFycm93OiBbW1wiZG91YmxlcmlnaHRhcnJvd1wiXSwgMC44ODgsIDU2MCwgXCJ4TWF4WU1pblwiXSxcbiAgeFJpZ2h0YXJyb3c6IFtbXCJkb3VibGVyaWdodGFycm93XCJdLCAxLjUyNiwgNTYwLCBcInhNYXhZTWluXCJdLFxuICB4TGVmdGFycm93OiBbW1wiZG91YmxlbGVmdGFycm93XCJdLCAxLjUyNiwgNTYwLCBcInhNaW5ZTWluXCJdLFxuICBvdmVybGVmdGhhcnBvb246IFtbXCJsZWZ0aGFycG9vblwiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgeGxlZnRoYXJwb29udXA6IFtbXCJsZWZ0aGFycG9vblwiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgeGxlZnRoYXJwb29uZG93bjogW1tcImxlZnRoYXJwb29uZG93blwiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgb3ZlcnJpZ2h0aGFycG9vbjogW1tcInJpZ2h0aGFycG9vblwiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgeHJpZ2h0aGFycG9vbnVwOiBbW1wicmlnaHRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNYXhZTWluXCJdLFxuICB4cmlnaHRoYXJwb29uZG93bjogW1tcInJpZ2h0aGFycG9vbmRvd25cIl0sIDAuODg4LCA1MjIsIFwieE1heFlNaW5cIl0sXG4gIHhsb25nZXF1YWw6IFtbXCJsb25nZXF1YWxcIl0sIDAuODg4LCAzMzQsIFwieE1pbllNaW5cIl0sXG4gIFwiXFxcXGNkbG9uZ2VxdWFsXCI6IFtbXCJsb25nZXF1YWxcIl0sIDMuMCwgMzM0LCBcInhNaW5ZTWluXCJdLFxuICB4dHdvaGVhZGxlZnRhcnJvdzogW1tcInR3b2hlYWRsZWZ0YXJyb3dcIl0sIDAuODg4LCAzMzQsIFwieE1pbllNaW5cIl0sXG4gIHh0d29oZWFkcmlnaHRhcnJvdzogW1tcInR3b2hlYWRyaWdodGFycm93XCJdLCAwLjg4OCwgMzM0LCBcInhNYXhZTWluXCJdLFxuICBvdmVybGVmdHJpZ2h0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIiwgXCJyaWdodGFycm93XCJdLCAwLjg4OCwgNTIyXSxcbiAgb3ZlcmJyYWNlOiBbW1wibGVmdGJyYWNlXCIsIFwibWlkYnJhY2VcIiwgXCJyaWdodGJyYWNlXCJdLCAxLjYsIDU0OF0sXG4gIHVuZGVyYnJhY2U6IFtbXCJsZWZ0YnJhY2V1bmRlclwiLCBcIm1pZGJyYWNldW5kZXJcIiwgXCJyaWdodGJyYWNldW5kZXJcIl0sIDEuNiwgNTQ4XSxcbiAgdW5kZXJsZWZ0cmlnaHRhcnJvdzogW1tcImxlZnRhcnJvd1wiLCBcInJpZ2h0YXJyb3dcIl0sIDAuODg4LCA1MjJdLFxuICB4bGVmdHJpZ2h0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIiwgXCJyaWdodGFycm93XCJdLCAxLjc1LCA1MjJdLFxuICB4TGVmdHJpZ2h0YXJyb3c6IFtbXCJkb3VibGVsZWZ0YXJyb3dcIiwgXCJkb3VibGVyaWdodGFycm93XCJdLCAxLjc1LCA1NjBdLFxuICB4cmlnaHRsZWZ0aGFycG9vbnM6IFtbXCJsZWZ0aGFycG9vbmRvd25wbHVzXCIsIFwicmlnaHRoYXJwb29ucGx1c1wiXSwgMS43NSwgNzE2XSxcbiAgeGxlZnRyaWdodGhhcnBvb25zOiBbW1wibGVmdGhhcnBvb25wbHVzXCIsIFwicmlnaHRoYXJwb29uZG93bnBsdXNcIl0sIDEuNzUsIDcxNl0sXG4gIHhob29rbGVmdGFycm93OiBbW1wibGVmdGFycm93XCIsIFwicmlnaHRob29rXCJdLCAxLjA4LCA1MjJdLFxuICB4aG9va3JpZ2h0YXJyb3c6IFtbXCJsZWZ0aG9va1wiLCBcInJpZ2h0YXJyb3dcIl0sIDEuMDgsIDUyMl0sXG4gIG92ZXJsaW5lc2VnbWVudDogW1tcImxlZnRsaW5lc2VnbWVudFwiLCBcInJpZ2h0bGluZXNlZ21lbnRcIl0sIDAuODg4LCA1MjJdLFxuICB1bmRlcmxpbmVzZWdtZW50OiBbW1wibGVmdGxpbmVzZWdtZW50XCIsIFwicmlnaHRsaW5lc2VnbWVudFwiXSwgMC44ODgsIDUyMl0sXG4gIG92ZXJncm91cDogW1tcImxlZnRncm91cFwiLCBcInJpZ2h0Z3JvdXBcIl0sIDAuODg4LCAzNDJdLFxuICB1bmRlcmdyb3VwOiBbW1wibGVmdGdyb3VwdW5kZXJcIiwgXCJyaWdodGdyb3VwdW5kZXJcIl0sIDAuODg4LCAzNDJdLFxuICB4bWFwc3RvOiBbW1wibGVmdG1hcHN0b1wiLCBcInJpZ2h0YXJyb3dcIl0sIDEuNSwgNTIyXSxcbiAgeHRvZnJvbTogW1tcImxlZnRUb0Zyb21cIiwgXCJyaWdodFRvRnJvbVwiXSwgMS43NSwgNTI4XSxcbiAgLy8gVGhlIG5leHQgdGhyZWUgYXJyb3dzIGFyZSBmcm9tIHRoZSBtaGNoZW0gcGFja2FnZS5cbiAgLy8gSW4gbWhjaGVtLnN0eSwgbWluLWxlbmd0aCBpcyAyLjBlbS4gQnV0IHRoZXNlIGFycm93cyBtaWdodCBhcHBlYXIgaW4gdGhlXG4gIC8vIGRvY3VtZW50IGFzIFxceHJpZ2h0YXJyb3cgb3IgXFx4cmlnaHRsZWZ0aGFycG9vbnMuIFRob3NlIGhhdmVcbiAgLy8gbWluLWxlbmd0aCA9IDEuNzVlbSwgc28gd2Ugc2V0IG1pbi1sZW5ndGggb24gdGhlc2UgbmV4dCB0aHJlZSB0byBtYXRjaC5cbiAgeHJpZ2h0bGVmdGFycm93czogW1tcImJhcmFib3ZlbGVmdGFycm93XCIsIFwicmlnaHRhcnJvd2Fib3ZlYmFyXCJdLCAxLjc1LCA5MDFdLFxuICB4cmlnaHRlcXVpbGlicml1bTogW1tcImJhcmFib3Zlc2hvcnRsZWZ0aGFycG9vblwiLCBcInJpZ2h0aGFycG9vbmFib3Zlc2hvcnRiYXJcIl0sIDEuNzUsIDcxNl0sXG4gIHhsZWZ0ZXF1aWxpYnJpdW06IFtbXCJzaG9ydGJhcmFib3ZlbGVmdGhhcnBvb25cIiwgXCJzaG9ydHJpZ2h0aGFycG9vbmFib3ZlYmFyXCJdLCAxLjc1LCA3MTZdXG59O1xuXG52YXIgZ3JvdXBMZW5ndGggPSBmdW5jdGlvbiBncm91cExlbmd0aChhcmcpIHtcbiAgaWYgKGFyZy50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICByZXR1cm4gYXJnLmJvZHkubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG52YXIgc3ZnU3BhbiA9IGZ1bmN0aW9uIHN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gQ3JlYXRlIGEgc3BhbiB3aXRoIGlubGluZSBTVkcgZm9yIHRoZSBlbGVtZW50LlxuICBmdW5jdGlvbiBidWlsZFN2Z1NwYW5fKCkge1xuICAgIHZhciB2aWV3Qm94V2lkdGggPSA0MDAwMDA7IC8vIGRlZmF1bHRcblxuICAgIHZhciBsYWJlbCA9IGdyb3VwLmxhYmVsLnNsaWNlKDEpO1xuXG4gICAgaWYgKHV0aWxzLmNvbnRhaW5zKFtcIndpZGVoYXRcIiwgXCJ3aWRlY2hlY2tcIiwgXCJ3aWRldGlsZGVcIiwgXCJ1dGlsZGVcIl0sIGxhYmVsKSkge1xuICAgICAgLy8gRWFjaCB0eXBlIGluIHRoZSBgaWZgIHN0YXRlbWVudCBjb3JyZXNwb25kcyB0byBvbmUgb2YgdGhlIFBhcnNlTm9kZVxuICAgICAgLy8gdHlwZXMgYmVsb3cuIFRoaXMgbmFycm93aW5nIGlzIHJlcXVpcmVkIHRvIGFjY2VzcyBgZ3JwLmJhc2VgLlxuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgdmFyIGdycCA9IGdyb3VwOyAvLyBUaGVyZSBhcmUgZm91ciBTVkcgaW1hZ2VzIGF2YWlsYWJsZSBmb3IgZWFjaCBmdW5jdGlvbi5cbiAgICAgIC8vIENob29zZSBhIHRhbGxlciBpbWFnZSB3aGVuIHRoZXJlIGFyZSBtb3JlIGNoYXJhY3RlcnMuXG5cbiAgICAgIHZhciBudW1DaGFycyA9IGdyb3VwTGVuZ3RoKGdycC5iYXNlKTtcbiAgICAgIHZhciB2aWV3Qm94SGVpZ2h0O1xuICAgICAgdmFyIHBhdGhOYW1lO1xuXG4gICAgICB2YXIgX2hlaWdodDtcblxuICAgICAgaWYgKG51bUNoYXJzID4gNSkge1xuICAgICAgICBpZiAobGFiZWwgPT09IFwid2lkZWhhdFwiIHx8IGxhYmVsID09PSBcIndpZGVjaGVja1wiKSB7XG4gICAgICAgICAgdmlld0JveEhlaWdodCA9IDQyMDtcbiAgICAgICAgICB2aWV3Qm94V2lkdGggPSAyMzY0O1xuICAgICAgICAgIF9oZWlnaHQgPSAwLjQyO1xuICAgICAgICAgIHBhdGhOYW1lID0gbGFiZWwgKyBcIjRcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aWV3Qm94SGVpZ2h0ID0gMzEyO1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IDIzNDA7XG4gICAgICAgICAgX2hlaWdodCA9IDAuMzQ7XG4gICAgICAgICAgcGF0aE5hbWUgPSBcInRpbGRlNFwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaW1nSW5kZXggPSBbMSwgMSwgMiwgMiwgMywgM11bbnVtQ2hhcnNdO1xuXG4gICAgICAgIGlmIChsYWJlbCA9PT0gXCJ3aWRlaGF0XCIgfHwgbGFiZWwgPT09IFwid2lkZWNoZWNrXCIpIHtcbiAgICAgICAgICB2aWV3Qm94V2lkdGggPSBbMCwgMTA2MiwgMjM2NCwgMjM2NCwgMjM2NF1baW1nSW5kZXhdO1xuICAgICAgICAgIHZpZXdCb3hIZWlnaHQgPSBbMCwgMjM5LCAzMDAsIDM2MCwgNDIwXVtpbWdJbmRleF07XG4gICAgICAgICAgX2hlaWdodCA9IFswLCAwLjI0LCAwLjMsIDAuMywgMC4zNiwgMC40Ml1baW1nSW5kZXhdO1xuICAgICAgICAgIHBhdGhOYW1lID0gbGFiZWwgKyBpbWdJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aWV3Qm94V2lkdGggPSBbMCwgNjAwLCAxMDMzLCAyMzM5LCAyMzQwXVtpbWdJbmRleF07XG4gICAgICAgICAgdmlld0JveEhlaWdodCA9IFswLCAyNjAsIDI4NiwgMzA2LCAzMTJdW2ltZ0luZGV4XTtcbiAgICAgICAgICBfaGVpZ2h0ID0gWzAsIDAuMjYsIDAuMjg2LCAwLjMsIDAuMzA2LCAwLjM0XVtpbWdJbmRleF07XG4gICAgICAgICAgcGF0aE5hbWUgPSBcInRpbGRlXCIgKyBpbWdJbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgcGF0aCA9IG5ldyBQYXRoTm9kZShwYXRoTmFtZSk7XG4gICAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKFtwYXRoXSwge1xuICAgICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgICBcImhlaWdodFwiOiBtYWtlRW0oX2hlaWdodCksXG4gICAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgdmlld0JveEhlaWdodCxcbiAgICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IFwibm9uZVwiXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNwYW46IGJ1aWxkQ29tbW9uLm1ha2VTdmdTcGFuKFtdLCBbc3ZnTm9kZV0sIG9wdGlvbnMpLFxuICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiBfaGVpZ2h0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3BhbnMgPSBbXTtcbiAgICAgIHZhciBkYXRhID0ga2F0ZXhJbWFnZXNEYXRhW2xhYmVsXTtcbiAgICAgIHZhciBbcGF0aHMsIF9taW5XaWR0aCwgX3ZpZXdCb3hIZWlnaHRdID0gZGF0YTtcblxuICAgICAgdmFyIF9oZWlnaHQyID0gX3ZpZXdCb3hIZWlnaHQgLyAxMDAwO1xuXG4gICAgICB2YXIgbnVtU3ZnQ2hpbGRyZW4gPSBwYXRocy5sZW5ndGg7XG4gICAgICB2YXIgd2lkdGhDbGFzc2VzO1xuICAgICAgdmFyIGFsaWducztcblxuICAgICAgaWYgKG51bVN2Z0NoaWxkcmVuID09PSAxKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWU6IEFsbCB0aGVzZSBjYXNlcyBtdXN0IGJlIG9mIHRoZSA0LXR1cGxlIHR5cGUuXG4gICAgICAgIHZhciBhbGlnbjEgPSBkYXRhWzNdO1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoaWRlLXRhaWxcIl07XG4gICAgICAgIGFsaWducyA9IFthbGlnbjFdO1xuICAgICAgfSBlbHNlIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMikge1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoYWxmYXJyb3ctbGVmdFwiLCBcImhhbGZhcnJvdy1yaWdodFwiXTtcbiAgICAgICAgYWxpZ25zID0gW1wieE1pbllNaW5cIiwgXCJ4TWF4WU1pblwiXTtcbiAgICAgIH0gZWxzZSBpZiAobnVtU3ZnQ2hpbGRyZW4gPT09IDMpIHtcbiAgICAgICAgd2lkdGhDbGFzc2VzID0gW1wiYnJhY2UtbGVmdFwiLCBcImJyYWNlLWNlbnRlclwiLCBcImJyYWNlLXJpZ2h0XCJdO1xuICAgICAgICBhbGlnbnMgPSBbXCJ4TWluWU1pblwiLCBcInhNaWRZTWluXCIsIFwieE1heFlNaW5cIl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3JyZWN0IGthdGV4SW1hZ2VzRGF0YSBvciB1cGRhdGUgY29kZSBoZXJlIHRvIHN1cHBvcnRcXG4gICAgICAgICAgICAgICAgICAgIFwiICsgbnVtU3ZnQ2hpbGRyZW4gKyBcIiBjaGlsZHJlbi5cIik7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtU3ZnQ2hpbGRyZW47IGkrKykge1xuICAgICAgICB2YXIgX3BhdGggPSBuZXcgUGF0aE5vZGUocGF0aHNbaV0pO1xuXG4gICAgICAgIHZhciBfc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKFtfcGF0aF0sIHtcbiAgICAgICAgICBcIndpZHRoXCI6IFwiNDAwZW1cIixcbiAgICAgICAgICBcImhlaWdodFwiOiBtYWtlRW0oX2hlaWdodDIpLFxuICAgICAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgX3ZpZXdCb3hIZWlnaHQsXG4gICAgICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IGFsaWduc1tpXSArIFwiIHNsaWNlXCJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIF9zcGFuID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW3dpZHRoQ2xhc3Nlc1tpXV0sIFtfc3ZnTm9kZV0sIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGFuOiBfc3BhbixcbiAgICAgICAgICAgIG1pbldpZHRoOiBfbWluV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHQyXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfc3Bhbi5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oX2hlaWdodDIpO1xuICAgICAgICAgIHNwYW5zLnB1c2goX3NwYW4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNwYW46IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cmV0Y2h5XCJdLCBzcGFucywgb3B0aW9ucyksXG4gICAgICAgIG1pbldpZHRoOiBfbWluV2lkdGgsXG4gICAgICAgIGhlaWdodDogX2hlaWdodDJcbiAgICAgIH07XG4gICAgfVxuICB9IC8vIGJ1aWxkU3ZnU3Bhbl8oKVxuXG5cbiAgdmFyIHtcbiAgICBzcGFuLFxuICAgIG1pbldpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gYnVpbGRTdmdTcGFuXygpOyAvLyBOb3RlIHRoYXQgd2UgYXJlIHJldHVybmluZyBzcGFuLmRlcHRoID0gMC5cbiAgLy8gQW55IGFkanVzdG1lbnRzIHJlbGF0aXZlIHRvIHRoZSBiYXNlbGluZSBtdXN0IGJlIGRvbmUgaW4gYnVpbGRIVE1MLlxuXG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShoZWlnaHQpO1xuXG4gIGlmIChtaW5XaWR0aCA+IDApIHtcbiAgICBzcGFuLnN0eWxlLm1pbldpZHRoID0gbWFrZUVtKG1pbldpZHRoKTtcbiAgfVxuXG4gIHJldHVybiBzcGFuO1xufTtcblxudmFyIGVuY2xvc2VTcGFuID0gZnVuY3Rpb24gZW5jbG9zZVNwYW4oaW5uZXIsIGxhYmVsLCB0b3BQYWQsIGJvdHRvbVBhZCwgb3B0aW9ucykge1xuICAvLyBSZXR1cm4gYW4gaW1hZ2Ugc3BhbiBmb3IgXFxjYW5jZWwsIFxcYmNhbmNlbCwgXFx4Y2FuY2VsLCBcXGZib3gsIG9yIFxcYW5nbFxuICB2YXIgaW1nO1xuICB2YXIgdG90YWxIZWlnaHQgPSBpbm5lci5oZWlnaHQgKyBpbm5lci5kZXB0aCArIHRvcFBhZCArIGJvdHRvbVBhZDtcblxuICBpZiAoL2Zib3h8Y29sb3J8YW5nbC8udGVzdChsYWJlbCkpIHtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiLCBsYWJlbF0sIFtdLCBvcHRpb25zKTtcblxuICAgIGlmIChsYWJlbCA9PT0gXCJmYm94XCIpIHtcbiAgICAgIHZhciBjb2xvciA9IG9wdGlvbnMuY29sb3IgJiYgb3B0aW9ucy5nZXRDb2xvcigpO1xuXG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgaW1nLnN0eWxlLmJvcmRlckNvbG9yID0gY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFxcY2FuY2VsLCBcXGJjYW5jZWwsIG9yIFxceGNhbmNlbFxuICAgIC8vIFNpbmNlIFxcY2FuY2VsJ3MgU1ZHIGlzIGlubGluZSBhbmQgaXQgb21pdHMgdGhlIHZpZXdCb3ggYXR0cmlidXRlLFxuICAgIC8vIGl0cyBzdHJva2Utd2lkdGggd2lsbCBub3QgdmFyeSB3aXRoIHNwYW4gYXJlYS5cbiAgICB2YXIgbGluZXMgPSBbXTtcblxuICAgIGlmICgvXltieF1jYW5jZWwkLy50ZXN0KGxhYmVsKSkge1xuICAgICAgbGluZXMucHVzaChuZXcgTGluZU5vZGUoe1xuICAgICAgICBcIngxXCI6IFwiMFwiLFxuICAgICAgICBcInkxXCI6IFwiMFwiLFxuICAgICAgICBcIngyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInkyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBcIjAuMDQ2ZW1cIlxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICgvXng/Y2FuY2VsJC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGxpbmVzLnB1c2gobmV3IExpbmVOb2RlKHtcbiAgICAgICAgXCJ4MVwiOiBcIjBcIixcbiAgICAgICAgXCJ5MVwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ4MlwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ5MlwiOiBcIjBcIixcbiAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCIwLjA0NmVtXCJcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKGxpbmVzLCB7XG4gICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgXCJoZWlnaHRcIjogbWFrZUVtKHRvdGFsSGVpZ2h0KVxuICAgIH0pO1xuICAgIGltZyA9IGJ1aWxkQ29tbW9uLm1ha2VTdmdTcGFuKFtdLCBbc3ZnTm9kZV0sIG9wdGlvbnMpO1xuICB9XG5cbiAgaW1nLmhlaWdodCA9IHRvdGFsSGVpZ2h0O1xuICBpbWcuc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKHRvdGFsSGVpZ2h0KTtcbiAgcmV0dXJuIGltZztcbn07XG5cbnZhciBzdHJldGNoeSA9IHtcbiAgZW5jbG9zZVNwYW4sXG4gIG1hdGhNTG5vZGUsXG4gIHN2Z1NwYW5cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB0aGF0IHRoZSBub2RlIGlzIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCByZXR1cm5zIGl0IHdpdGggc3RyaWN0ZXJcbiAqIHR5cGluZy4gVGhyb3dzIGlmIHRoZSBub2RlJ3MgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9kZVR5cGUobm9kZSwgdHlwZSkge1xuICBpZiAoIW5vZGUgfHwgbm9kZS50eXBlICE9PSB0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9kZSBvZiB0eXBlIFwiICsgdHlwZSArIFwiLCBidXQgZ290IFwiICsgKG5vZGUgPyBcIm5vZGUgb2YgdHlwZSBcIiArIG5vZGUudHlwZSA6IFN0cmluZyhub2RlKSkpO1xuICB9IC8vICRGbG93Rml4TWUsID49MC4xMjVcblxuXG4gIHJldHVybiBub2RlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG1vcmUgc3RyaWN0bHkgdHlwZWQgaWZmIGl0IGlzIG9mIHRoZSBnaXZlbiB0eXBlLiBPdGhlcndpc2UsXG4gKiByZXR1cm5zIG51bGwuXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0U3ltYm9sTm9kZVR5cGUobm9kZSkge1xuICB2YXIgdHlwZWROb2RlID0gY2hlY2tTeW1ib2xOb2RlVHlwZShub2RlKTtcblxuICBpZiAoIXR5cGVkTm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vZGUgb2Ygc3ltYm9sIGdyb3VwIHR5cGUsIGJ1dCBnb3QgXCIgKyAobm9kZSA/IFwibm9kZSBvZiB0eXBlIFwiICsgbm9kZS50eXBlIDogU3RyaW5nKG5vZGUpKSk7XG4gIH1cblxuICByZXR1cm4gdHlwZWROb2RlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG1vcmUgc3RyaWN0bHkgdHlwZWQgaWZmIGl0IGlzIG9mIHRoZSBnaXZlbiB0eXBlLiBPdGhlcndpc2UsXG4gKiByZXR1cm5zIG51bGwuXG4gKi9cblxuZnVuY3Rpb24gY2hlY2tTeW1ib2xOb2RlVHlwZShub2RlKSB7XG4gIGlmIChub2RlICYmIChub2RlLnR5cGUgPT09IFwiYXRvbVwiIHx8IE5PTl9BVE9NUy5oYXNPd25Qcm9wZXJ0eShub2RlLnR5cGUpKSkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBOT1RFOiBVbmxpa2UgbW9zdCBgaHRtbEJ1aWxkZXJgcywgdGhpcyBvbmUgaGFuZGxlcyBub3Qgb25seSBcImFjY2VudFwiLCBidXRcbi8vIGFsc28gXCJzdXBzdWJcIiBzaW5jZSBhbiBhY2NlbnQgY2FuIGFmZmVjdCBzdXBlci9zdWJzY3JpcHRpbmcuXG52YXIgaHRtbEJ1aWxkZXIkYSA9IChncnAsIG9wdGlvbnMpID0+IHtcbiAgLy8gQWNjZW50cyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLCBydWxlIDEyLlxuICB2YXIgYmFzZTtcbiAgdmFyIGdyb3VwO1xuICB2YXIgc3VwU3ViR3JvdXA7XG5cbiAgaWYgKGdycCAmJiBncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIG91ciBiYXNlIGlzIGEgY2hhcmFjdGVyIGJveCwgYW5kIHdlIGhhdmUgc3VwZXJzY3JpcHRzIGFuZFxuICAgIC8vIHN1YnNjcmlwdHMsIHRoZSBzdXBzdWIgd2lsbCBkZWZlciB0byB1cy4gSW4gcGFydGljdWxhciwgd2Ugd2FudFxuICAgIC8vIHRvIGF0dGFjaCB0aGUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzIHRvIHRoZSBpbm5lciBib2R5IChzb1xuICAgIC8vIHRoYXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMgd29uJ3QgYmVcbiAgICAvLyBhZmZlY3RlZCBieSB0aGUgaGVpZ2h0IG9mIHRoZSBhY2NlbnQpLiBXZSBhY2NvbXBsaXNoIHRoaXMgYnlcbiAgICAvLyBzdGlja2luZyB0aGUgYmFzZSBvZiB0aGUgYWNjZW50IGludG8gdGhlIGJhc2Ugb2YgdGhlIHN1cHN1YiwgYW5kXG4gICAgLy8gcmVuZGVyaW5nIHRoYXQsIHdoaWxlIGtlZXBpbmcgdHJhY2sgb2Ygd2hlcmUgdGhlIGFjY2VudCBpcy5cbiAgICAvLyBUaGUgcmVhbCBhY2NlbnQgZ3JvdXAgaXMgdGhlIGJhc2Ugb2YgdGhlIHN1cHN1YiBncm91cFxuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoZ3JwLmJhc2UsIFwiYWNjZW50XCIpOyAvLyBUaGUgY2hhcmFjdGVyIGJveCBpcyB0aGUgYmFzZSBvZiB0aGUgYWNjZW50IGdyb3VwXG5cbiAgICBiYXNlID0gZ3JvdXAuYmFzZTsgLy8gU3RpY2sgdGhlIGNoYXJhY3RlciBib3ggaW50byB0aGUgYmFzZSBvZiB0aGUgc3Vwc3ViIGdyb3VwXG5cbiAgICBncnAuYmFzZSA9IGJhc2U7IC8vIFJlcmVuZGVyIHRoZSBzdXBzdWIgZ3JvdXAgd2l0aCBpdHMgbmV3IGJhc2UsIGFuZCBzdG9yZSB0aGF0XG4gICAgLy8gcmVzdWx0LlxuXG4gICAgc3VwU3ViR3JvdXAgPSBhc3NlcnRTcGFuKGJ1aWxkR3JvdXAkMShncnAsIG9wdGlvbnMpKTsgLy8gcmVzZXQgb3JpZ2luYWwgYmFzZVxuXG4gICAgZ3JwLmJhc2UgPSBncm91cDtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJhY2NlbnRcIik7XG4gICAgYmFzZSA9IGdyb3VwLmJhc2U7XG4gIH0gLy8gQnVpbGQgdGhlIGJhc2UgZ3JvdXBcblxuXG4gIHZhciBib2R5ID0gYnVpbGRHcm91cCQxKGJhc2UsIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpOyAvLyBEb2VzIHRoZSBhY2NlbnQgbmVlZCB0byBzaGlmdCBmb3IgdGhlIHNrZXcgb2YgYSBjaGFyYWN0ZXI/XG5cbiAgdmFyIG11c3RTaGlmdCA9IGdyb3VwLmlzU2hpZnR5ICYmIHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJhc2UpOyAvLyBDYWxjdWxhdGUgdGhlIHNrZXcgb2YgdGhlIGFjY2VudC4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgbGluZSBcIklmIHRoZVxuICAvLyBudWNsZXVzIGlzIG5vdCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGxldCBzID0gMDsgb3RoZXJ3aXNlIHNldCBzIHRvIHRoZVxuICAvLyBrZXJuIGFtb3VudCBmb3IgdGhlIG51Y2xldXMgZm9sbG93ZWQgYnkgdGhlIFxcc2tld2NoYXIgb2YgaXRzIGZvbnQuXCJcbiAgLy8gTm90ZSB0aGF0IG91ciBza2V3IG1ldHJpY3MgYXJlIGp1c3QgdGhlIGtlcm4gYmV0d2VlbiBlYWNoIGNoYXJhY3RlclxuICAvLyBhbmQgdGhlIHNrZXdjaGFyLlxuXG4gIHZhciBza2V3ID0gMDtcblxuICBpZiAobXVzdFNoaWZ0KSB7XG4gICAgLy8gSWYgdGhlIGJhc2UgaXMgYSBjaGFyYWN0ZXIgYm94LCB0aGVuIHdlIHdhbnQgdGhlIHNrZXcgb2YgdGhlXG4gICAgLy8gaW5uZXJtb3N0IGNoYXJhY3Rlci4gVG8gZG8gdGhhdCwgd2UgZmluZCB0aGUgaW5uZXJtb3N0IGNoYXJhY3RlcjpcbiAgICB2YXIgYmFzZUNoYXIgPSB1dGlscy5nZXRCYXNlRWxlbShiYXNlKTsgLy8gVGhlbiwgd2UgcmVuZGVyIGl0cyBncm91cCB0byBnZXQgdGhlIHN5bWJvbCBpbnNpZGUgaXRcblxuICAgIHZhciBiYXNlR3JvdXAgPSBidWlsZEdyb3VwJDEoYmFzZUNoYXIsIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpOyAvLyBGaW5hbGx5LCB3ZSBwdWxsIHRoZSBza2V3IG9mZiBvZiB0aGUgc3ltYm9sLlxuXG4gICAgc2tldyA9IGFzc2VydFN5bWJvbERvbU5vZGUoYmFzZUdyb3VwKS5za2V3OyAvLyBOb3RlIHRoYXQgd2Ugbm93IHRocm93IGF3YXkgYmFzZUdyb3VwLCBiZWNhdXNlIHRoZSBsYXllcnMgd2VcbiAgICAvLyByZW1vdmVkIHdpdGggZ2V0QmFzZUVsZW0gbWlnaHQgY29udGFpbiB0aGluZ3MgbGlrZSBcXGNvbG9yIHdoaWNoXG4gICAgLy8gd2UgY2FuJ3QgZ2V0IHJpZCBvZi5cbiAgICAvLyBUT0RPKGVtaWx5KTogRmluZCBhIGJldHRlciB3YXkgdG8gZ2V0IHRoZSBza2V3XG4gIH1cblxuICB2YXIgYWNjZW50QmVsb3cgPSBncm91cC5sYWJlbCA9PT0gXCJcXFxcY1wiOyAvLyBjYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSBib2R5IGFuZCB0aGUgYWNjZW50XG5cbiAgdmFyIGNsZWFyYW5jZSA9IGFjY2VudEJlbG93ID8gYm9keS5oZWlnaHQgKyBib2R5LmRlcHRoIDogTWF0aC5taW4oYm9keS5oZWlnaHQsIG9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0KTsgLy8gQnVpbGQgdGhlIGFjY2VudFxuXG4gIHZhciBhY2NlbnRCb2R5O1xuXG4gIGlmICghZ3JvdXAuaXNTdHJldGNoeSkge1xuICAgIHZhciBhY2NlbnQ7XG4gICAgdmFyIHdpZHRoO1xuXG4gICAgaWYgKGdyb3VwLmxhYmVsID09PSBcIlxcXFx2ZWNcIikge1xuICAgICAgLy8gQmVmb3JlIHZlcnNpb24gMC45LCBcXHZlYyB1c2VkIHRoZSBjb21iaW5pbmcgZm9udCBnbHlwaCBVKzIwRDcuXG4gICAgICAvLyBCdXQgYnJvd3NlcnMsIGVzcGVjaWFsbHkgU2FmYXJpLCBhcmUgbm90IGNvbnNpc3RlbnQgaW4gaG93IHRoZXlcbiAgICAgIC8vIHJlbmRlciBjb21iaW5pbmcgY2hhcmFjdGVycyB3aGVuIG5vdCBwcmVjZWRlZCBieSBhIGNoYXJhY3Rlci5cbiAgICAgIC8vIFNvIG5vdyB3ZSB1c2UgYW4gU1ZHLlxuICAgICAgLy8gSWYgU2FmYXJpIHJlZm9ybXMsIHdlIHNob3VsZCBjb25zaWRlciByZXZlcnRpbmcgdG8gdGhlIGdseXBoLlxuICAgICAgYWNjZW50ID0gYnVpbGRDb21tb24uc3RhdGljU3ZnKFwidmVjXCIsIG9wdGlvbnMpO1xuICAgICAgd2lkdGggPSBidWlsZENvbW1vbi5zdmdEYXRhLnZlY1sxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjZW50ID0gYnVpbGRDb21tb24ubWFrZU9yZCh7XG4gICAgICAgIG1vZGU6IGdyb3VwLm1vZGUsXG4gICAgICAgIHRleHQ6IGdyb3VwLmxhYmVsXG4gICAgICB9LCBvcHRpb25zLCBcInRleHRvcmRcIik7XG4gICAgICBhY2NlbnQgPSBhc3NlcnRTeW1ib2xEb21Ob2RlKGFjY2VudCk7IC8vIFJlbW92ZSB0aGUgaXRhbGljIGNvcnJlY3Rpb24gb2YgdGhlIGFjY2VudCwgYmVjYXVzZSBpdCBvbmx5IHNlcnZlcyB0b1xuICAgICAgLy8gc2hpZnQgdGhlIGFjY2VudCBvdmVyIHRvIGEgcGxhY2Ugd2UgZG9uJ3Qgd2FudC5cblxuICAgICAgYWNjZW50Lml0YWxpYyA9IDA7XG4gICAgICB3aWR0aCA9IGFjY2VudC53aWR0aDtcblxuICAgICAgaWYgKGFjY2VudEJlbG93KSB7XG4gICAgICAgIGNsZWFyYW5jZSArPSBhY2NlbnQuZGVwdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYWNjZW50Qm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFjY2VudC1ib2R5XCJdLCBbYWNjZW50XSk7IC8vIFwiRnVsbFwiIGFjY2VudHMgZXhwYW5kIHRoZSB3aWR0aCBvZiB0aGUgcmVzdWx0aW5nIHN5bWJvbCB0byBiZVxuICAgIC8vIGF0IGxlYXN0IHRoZSB3aWR0aCBvZiB0aGUgYWNjZW50LCBhbmQgb3ZlcmxhcCBkaXJlY3RseSBvbnRvIHRoZVxuICAgIC8vIGNoYXJhY3RlciB3aXRob3V0IGFueSB2ZXJ0aWNhbCBvZmZzZXQuXG5cbiAgICB2YXIgYWNjZW50RnVsbCA9IGdyb3VwLmxhYmVsID09PSBcIlxcXFx0ZXh0Y2lyY2xlZFwiO1xuXG4gICAgaWYgKGFjY2VudEZ1bGwpIHtcbiAgICAgIGFjY2VudEJvZHkuY2xhc3Nlcy5wdXNoKCdhY2NlbnQtZnVsbCcpO1xuICAgICAgY2xlYXJhbmNlID0gYm9keS5oZWlnaHQ7XG4gICAgfSAvLyBTaGlmdCB0aGUgYWNjZW50IG92ZXIgYnkgdGhlIHNrZXcuXG5cblxuICAgIHZhciBsZWZ0ID0gc2tldzsgLy8gQ1NTIGRlZmluZXMgYC5rYXRleCAuYWNjZW50IC5hY2NlbnQtYm9keTpub3QoLmFjY2VudC1mdWxsKSB7IHdpZHRoOiAwIH1gXG4gICAgLy8gc28gdGhhdCB0aGUgYWNjZW50IGRvZXNuJ3QgY29udHJpYnV0ZSB0byB0aGUgYm91bmRpbmcgYm94LlxuICAgIC8vIFdlIG5lZWQgdG8gc2hpZnQgdGhlIGNoYXJhY3RlciBieSBpdHMgd2lkdGggKGVmZmVjdGl2ZWx5IGhhbGZcbiAgICAvLyBpdHMgd2lkdGgpIHRvIGNvbXBlbnNhdGUuXG5cbiAgICBpZiAoIWFjY2VudEZ1bGwpIHtcbiAgICAgIGxlZnQgLT0gd2lkdGggLyAyO1xuICAgIH1cblxuICAgIGFjY2VudEJvZHkuc3R5bGUubGVmdCA9IG1ha2VFbShsZWZ0KTsgLy8gXFx0ZXh0Y2lyY2xlZCB1c2VzIHRoZSBcXGJpZ2NpcmMgZ2x5cGgsIHNvIGl0IG5lZWRzIHNvbWVcbiAgICAvLyB2ZXJ0aWNhbCBhZGp1c3RtZW50IHRvIG1hdGNoIExhVGVYLlxuXG4gICAgaWYgKGdyb3VwLmxhYmVsID09PSBcIlxcXFx0ZXh0Y2lyY2xlZFwiKSB7XG4gICAgICBhY2NlbnRCb2R5LnN0eWxlLnRvcCA9IFwiLjJlbVwiO1xuICAgIH1cblxuICAgIGFjY2VudEJvZHkgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogLWNsZWFyYW5jZVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYWNjZW50Qm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBhY2NlbnRCb2R5ID0gc3RyZXRjaHkuc3ZnU3Bhbihncm91cCwgb3B0aW9ucyk7XG4gICAgYWNjZW50Qm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBhY2NlbnRCb2R5LFxuICAgICAgICB3cmFwcGVyQ2xhc3NlczogW1wic3ZnLWFsaWduXCJdLFxuICAgICAgICB3cmFwcGVyU3R5bGU6IHNrZXcgPiAwID8ge1xuICAgICAgICAgIHdpZHRoOiBcImNhbGMoMTAwJSAtIFwiICsgbWFrZUVtKDIgKiBza2V3KSArIFwiKVwiLFxuICAgICAgICAgIG1hcmdpbkxlZnQ6IG1ha2VFbSgyICogc2tldylcbiAgICAgICAgfSA6IHVuZGVmaW5lZFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIHZhciBhY2NlbnRXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImFjY2VudFwiXSwgW2FjY2VudEJvZHldLCBvcHRpb25zKTtcblxuICBpZiAoc3VwU3ViR3JvdXApIHtcbiAgICAvLyBIZXJlLCB3ZSByZXBsYWNlIHRoZSBcImJhc2VcIiBjaGlsZCBvZiB0aGUgc3Vwc3ViIHdpdGggb3VyIG5ld2x5XG4gICAgLy8gZ2VuZXJhdGVkIGFjY2VudC5cbiAgICBzdXBTdWJHcm91cC5jaGlsZHJlblswXSA9IGFjY2VudFdyYXA7IC8vIFNpbmNlIHdlIGRvbid0IHJlcnVuIHRoZSBoZWlnaHQgY2FsY3VsYXRpb24gYWZ0ZXIgcmVwbGFjaW5nIHRoZVxuICAgIC8vIGFjY2VudCwgd2UgbWFudWFsbHkgcmVjYWxjdWxhdGUgaGVpZ2h0LlxuXG4gICAgc3VwU3ViR3JvdXAuaGVpZ2h0ID0gTWF0aC5tYXgoYWNjZW50V3JhcC5oZWlnaHQsIHN1cFN1Ykdyb3VwLmhlaWdodCk7IC8vIEFjY2VudHMgc2hvdWxkIGFsd2F5cyBiZSBvcmRzLCBldmVuIHdoZW4gdGhlaXIgaW5uYXJkcyBhcmUgbm90LlxuXG4gICAgc3VwU3ViR3JvdXAuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIHJldHVybiBzdXBTdWJHcm91cDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYWNjZW50V3JhcDtcbiAgfVxufTtcblxudmFyIG1hdGhtbEJ1aWxkZXIkOSA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgYWNjZW50Tm9kZSA9IGdyb3VwLmlzU3RyZXRjaHkgPyBzdHJldGNoeS5tYXRoTUxub2RlKGdyb3VwLmxhYmVsKSA6IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW21ha2VUZXh0KGdyb3VwLmxhYmVsLCBncm91cC5tb2RlKV0pO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyksIGFjY2VudE5vZGVdKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnRcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYID0gbmV3IFJlZ0V4cChbXCJcXFxcYWN1dGVcIiwgXCJcXFxcZ3JhdmVcIiwgXCJcXFxcZGRvdFwiLCBcIlxcXFx0aWxkZVwiLCBcIlxcXFxiYXJcIiwgXCJcXFxcYnJldmVcIiwgXCJcXFxcY2hlY2tcIiwgXCJcXFxcaGF0XCIsIFwiXFxcXHZlY1wiLCBcIlxcXFxkb3RcIiwgXCJcXFxcbWF0aHJpbmdcIl0ubWFwKGFjY2VudCA9PiBcIlxcXFxcIiArIGFjY2VudCkuam9pbihcInxcIikpOyAvLyBBY2NlbnRzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxhY3V0ZVwiLCBcIlxcXFxncmF2ZVwiLCBcIlxcXFxkZG90XCIsIFwiXFxcXHRpbGRlXCIsIFwiXFxcXGJhclwiLCBcIlxcXFxicmV2ZVwiLCBcIlxcXFxjaGVja1wiLCBcIlxcXFxoYXRcIiwgXCJcXFxcdmVjXCIsIFwiXFxcXGRvdFwiLCBcIlxcXFxtYXRocmluZ1wiLCBcIlxcXFx3aWRlY2hlY2tcIiwgXCJcXFxcd2lkZWhhdFwiLCBcIlxcXFx3aWRldGlsZGVcIiwgXCJcXFxcb3ZlcnJpZ2h0YXJyb3dcIiwgXCJcXFxcb3ZlcmxlZnRhcnJvd1wiLCBcIlxcXFxPdmVycmlnaHRhcnJvd1wiLCBcIlxcXFxvdmVybGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxcb3Zlcmdyb3VwXCIsIFwiXFxcXG92ZXJsaW5lc2VnbWVudFwiLCBcIlxcXFxvdmVybGVmdGhhcnBvb25cIiwgXCJcXFxcb3ZlcnJpZ2h0aGFycG9vblwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IChjb250ZXh0LCBhcmdzKSA9PiB7XG4gICAgdmFyIGJhc2UgPSBub3JtYWxpemVBcmd1bWVudChhcmdzWzBdKTtcbiAgICB2YXIgaXNTdHJldGNoeSA9ICFOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYLnRlc3QoY29udGV4dC5mdW5jTmFtZSk7XG4gICAgdmFyIGlzU2hpZnR5ID0gIWlzU3RyZXRjaHkgfHwgY29udGV4dC5mdW5jTmFtZSA9PT0gXCJcXFxcd2lkZWhhdFwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGV0aWxkZVwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGVjaGVja1wiO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBjb250ZXh0LmZ1bmNOYW1lLFxuICAgICAgaXNTdHJldGNoeTogaXNTdHJldGNoeSxcbiAgICAgIGlzU2hpZnR5OiBpc1NoaWZ0eSxcbiAgICAgIGJhc2U6IGJhc2VcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkYSxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ5XG59KTsgLy8gVGV4dC1tb2RlIGFjY2VudHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImFjY2VudFwiLFxuICBuYW1lczogW1wiXFxcXCdcIiwgXCJcXFxcYFwiLCBcIlxcXFxeXCIsIFwiXFxcXH5cIiwgXCJcXFxcPVwiLCBcIlxcXFx1XCIsIFwiXFxcXC5cIiwgJ1xcXFxcIicsIFwiXFxcXGNcIiwgXCJcXFxcclwiLCBcIlxcXFxIXCIsIFwiXFxcXHZcIiwgXCJcXFxcdGV4dGNpcmNsZWRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IHRydWUsXG4gICAgLy8gdW5sZXNzIGluIHN0cmljdCBtb2RlXG4gICAgYXJnVHlwZXM6IFtcInByaW1pdGl2ZVwiXVxuICB9LFxuICBoYW5kbGVyOiAoY29udGV4dCwgYXJncykgPT4ge1xuICAgIHZhciBiYXNlID0gYXJnc1swXTtcbiAgICB2YXIgbW9kZSA9IGNvbnRleHQucGFyc2VyLm1vZGU7XG5cbiAgICBpZiAobW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgIGNvbnRleHQucGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcIm1hdGhWc1RleHRBY2NlbnRzXCIsIFwiTGFUZVgncyBhY2NlbnQgXCIgKyBjb250ZXh0LmZ1bmNOYW1lICsgXCIgd29ya3Mgb25seSBpbiB0ZXh0IG1vZGVcIik7XG4gICAgICBtb2RlID0gXCJ0ZXh0XCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiYWNjZW50XCIsXG4gICAgICBtb2RlOiBtb2RlLFxuICAgICAgbGFiZWw6IGNvbnRleHQuZnVuY05hbWUsXG4gICAgICBpc1N0cmV0Y2h5OiBmYWxzZSxcbiAgICAgIGlzU2hpZnR5OiB0cnVlLFxuICAgICAgYmFzZTogYmFzZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciRhLFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDlcbn0pO1xuXG4vLyBIb3Jpem9udGFsIG92ZXJsYXAgZnVuY3Rpb25zXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiYWNjZW50VW5kZXJcIixcbiAgbmFtZXM6IFtcIlxcXFx1bmRlcmxlZnRhcnJvd1wiLCBcIlxcXFx1bmRlcnJpZ2h0YXJyb3dcIiwgXCJcXFxcdW5kZXJsZWZ0cmlnaHRhcnJvd1wiLCBcIlxcXFx1bmRlcmdyb3VwXCIsIFwiXFxcXHVuZGVybGluZXNlZ21lbnRcIiwgXCJcXFxcdXRpbGRlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgYmFzZSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiYWNjZW50VW5kZXJcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYmFzZTogYmFzZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBUcmVhdCB1bmRlciBhY2NlbnRzIG11Y2ggbGlrZSB1bmRlcmxpbmVzLlxuICAgIHZhciBpbm5lckdyb3VwID0gYnVpbGRHcm91cCQxKGdyb3VwLmJhc2UsIG9wdGlvbnMpO1xuICAgIHZhciBhY2NlbnRCb2R5ID0gc3RyZXRjaHkuc3ZnU3Bhbihncm91cCwgb3B0aW9ucyk7XG4gICAgdmFyIGtlcm4gPSBncm91cC5sYWJlbCA9PT0gXCJcXFxcdXRpbGRlXCIgPyAwLjEyIDogMDsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuc1xuXG4gICAgdmFyIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJ0b3BcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogaW5uZXJHcm91cC5oZWlnaHQsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGFjY2VudEJvZHksXG4gICAgICAgIHdyYXBwZXJDbGFzc2VzOiBbXCJzdmctYWxpZ25cIl1cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IGtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyR3JvdXBcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJhY2NlbnR1bmRlclwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBhY2NlbnROb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKSwgYWNjZW50Tm9kZV0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiYWNjZW50dW5kZXJcIiwgXCJ0cnVlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uXG52YXIgcGFkZGVkTm9kZSA9IGdyb3VwID0+IHtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgZ3JvdXAgPyBbZ3JvdXBdIDogW10pO1xuICBub2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiKzAuNmVtXCIpO1xuICBub2RlLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBcIjAuM2VtXCIpO1xuICByZXR1cm4gbm9kZTtcbn07IC8vIFN0cmV0Y2h5IGFycm93cyB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50XG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInhBcnJvd1wiLFxuICBuYW1lczogW1wiXFxcXHhsZWZ0YXJyb3dcIiwgXCJcXFxceHJpZ2h0YXJyb3dcIiwgXCJcXFxceExlZnRhcnJvd1wiLCBcIlxcXFx4UmlnaHRhcnJvd1wiLCBcIlxcXFx4bGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxceExlZnRyaWdodGFycm93XCIsIFwiXFxcXHhob29rbGVmdGFycm93XCIsIFwiXFxcXHhob29rcmlnaHRhcnJvd1wiLCBcIlxcXFx4bWFwc3RvXCIsIFwiXFxcXHhyaWdodGhhcnBvb25kb3duXCIsIFwiXFxcXHhyaWdodGhhcnBvb251cFwiLCBcIlxcXFx4bGVmdGhhcnBvb25kb3duXCIsIFwiXFxcXHhsZWZ0aGFycG9vbnVwXCIsIFwiXFxcXHhyaWdodGxlZnRoYXJwb29uc1wiLCBcIlxcXFx4bGVmdHJpZ2h0aGFycG9vbnNcIiwgXCJcXFxceGxvbmdlcXVhbFwiLCBcIlxcXFx4dHdvaGVhZHJpZ2h0YXJyb3dcIiwgXCJcXFxceHR3b2hlYWRsZWZ0YXJyb3dcIiwgXCJcXFxceHRvZnJvbVwiLCAvLyBUaGUgbmV4dCAzIGZ1bmN0aW9ucyBhcmUgaGVyZSB0byBzdXBwb3J0IHRoZSBtaGNoZW0gZXh0ZW5zaW9uLlxuICAvLyBEaXJlY3QgdXNlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBkaXNjb3VyYWdlZCBhbmQgbWF5IGJyZWFrIHNvbWVkYXkuXG4gIFwiXFxcXHhyaWdodGxlZnRhcnJvd3NcIiwgXCJcXFxceHJpZ2h0ZXF1aWxpYnJpdW1cIiwgXCJcXFxceGxlZnRlcXVpbGlicml1bVwiLCAvLyBUaGUgbmV4dCAzIGZ1bmN0aW9ucyBhcmUgaGVyZSBvbmx5IHRvIHN1cHBvcnQgdGhlIHtDRH0gZW52aXJvbm1lbnQuXG4gIFwiXFxcXFxcXFxjZHJpZ2h0YXJyb3dcIiwgXCJcXFxcXFxcXGNkbGVmdGFycm93XCIsIFwiXFxcXFxcXFxjZGxvbmdlcXVhbFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIG51bU9wdGlvbmFsQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInhBcnJvd1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBib2R5OiBhcmdzWzBdLFxuICAgICAgYmVsb3c6IG9wdEFyZ3NbMF1cbiAgICB9O1xuICB9LFxuXG4gIC8vIEZsb3cgaXMgdW5hYmxlIHRvIGNvcnJlY3RseSBpbmZlciB0aGUgdHlwZSBvZiBgZ3JvdXBgLCBldmVuIHRob3VnaCBpdCdzXG4gIC8vIHVuYW1iaWd1b3VzbHkgZGV0ZXJtaW5lZCBmcm9tIHRoZSBwYXNzZWQtaW4gYHR5cGVgIGFib3ZlLlxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7IC8vIEJ1aWxkIHRoZSBhcmd1bWVudCBncm91cHMgaW4gdGhlIGFwcHJvcHJpYXRlIHN0eWxlLlxuICAgIC8vIFJlZjogYW1zbWF0aC5kdHg6ICAgXFxoYm94eyRcXHNjcmlwdHN0eWxlXFxta2VybiMzbXV7IzZ9XFxta2VybiM0bXUkfSVcbiAgICAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAgIC8vIHRoZW0gaW4gYSBzcGFuLlxuXG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKTtcbiAgICB2YXIgdXBwZXJHcm91cCA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgbmV3T3B0aW9ucywgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIHZhciBhcnJvd1ByZWZpeCA9IGdyb3VwLmxhYmVsLnNsaWNlKDAsIDIpID09PSBcIlxcXFx4XCIgPyBcInhcIiA6IFwiY2RcIjtcbiAgICB1cHBlckdyb3VwLmNsYXNzZXMucHVzaChhcnJvd1ByZWZpeCArIFwiLWFycm93LXBhZFwiKTtcbiAgICB2YXIgbG93ZXJHcm91cDtcblxuICAgIGlmIChncm91cC5iZWxvdykge1xuICAgICAgLy8gQnVpbGQgdGhlIGxvd2VyIGdyb3VwXG4gICAgICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSk7XG4gICAgICBsb3dlckdyb3VwID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkR3JvdXAkMShncm91cC5iZWxvdywgbmV3T3B0aW9ucywgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgICAgbG93ZXJHcm91cC5jbGFzc2VzLnB1c2goYXJyb3dQcmVmaXggKyBcIi1hcnJvdy1wYWRcIik7XG4gICAgfVxuXG4gICAgdmFyIGFycm93Qm9keSA9IHN0cmV0Y2h5LnN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpOyAvLyBSZSBzaGlmdDogTm90ZSB0aGF0IHN0cmV0Y2h5LnN2Z1NwYW4gcmV0dXJuZWQgYXJyb3dCb2R5LmRlcHRoID0gMC5cbiAgICAvLyBUaGUgcG9pbnQgd2Ugd2FudCBvbiB0aGUgbWF0aCBheGlzIGlzIGF0IDAuNSAqIGFycm93Qm9keS5oZWlnaHQuXG5cbiAgICB2YXIgYXJyb3dTaGlmdCA9IC1vcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCArIDAuNSAqIGFycm93Qm9keS5oZWlnaHQ7IC8vIDIgbXUga2Vybi4gUmVmOiBhbXNtYXRoLmR0eDogIzdcXGlmMCMyXFxlbHNlXFxta2VybiMybXVcXGZpXG5cbiAgICB2YXIgdXBwZXJTaGlmdCA9IC1vcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCAtIDAuNSAqIGFycm93Qm9keS5oZWlnaHQgLSAwLjExMTsgLy8gMC4xMTEgZW0gPSAyIG11XG5cbiAgICBpZiAodXBwZXJHcm91cC5kZXB0aCA+IDAuMjUgfHwgZ3JvdXAubGFiZWwgPT09IFwiXFxcXHhsZWZ0ZXF1aWxpYnJpdW1cIikge1xuICAgICAgdXBwZXJTaGlmdCAtPSB1cHBlckdyb3VwLmRlcHRoOyAvLyBzaGlmdCB1cCBpZiBkZXB0aCBlbmNyb2FjaGVzXG4gICAgfSAvLyBHZW5lcmF0ZSB0aGUgdmxpc3RcblxuXG4gICAgdmFyIHZsaXN0O1xuXG4gICAgaWYgKGxvd2VyR3JvdXApIHtcbiAgICAgIHZhciBsb3dlclNoaWZ0ID0gLW9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0ICsgbG93ZXJHcm91cC5oZWlnaHQgKyAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0ICsgMC4xMTE7XG4gICAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogdXBwZXJHcm91cCxcbiAgICAgICAgICBzaGlmdDogdXBwZXJTaGlmdFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogYXJyb3dCb2R5LFxuICAgICAgICAgIHNoaWZ0OiBhcnJvd1NoaWZ0XG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBsb3dlckdyb3VwLFxuICAgICAgICAgIHNoaWZ0OiBsb3dlclNoaWZ0XG4gICAgICAgIH1dXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHVwcGVyR3JvdXAsXG4gICAgICAgICAgc2hpZnQ6IHVwcGVyU2hpZnRcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGFycm93Qm9keSxcbiAgICAgICAgICBzaGlmdDogYXJyb3dTaGlmdFxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSAvLyAkRmxvd0ZpeE1lOiBSZXBsYWNlIHRoaXMgd2l0aCBwYXNzaW5nIFwic3ZnLWFsaWduXCIgaW50byBtYWtlVkxpc3QuXG5cblxuICAgIHZsaXN0LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaChcInN2Zy1hbGlnblwiKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXJlbFwiLCBcIngtYXJyb3dcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgYXJyb3dOb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gICAgYXJyb3dOb2RlLnNldEF0dHJpYnV0ZShcIm1pbnNpemVcIiwgZ3JvdXAubGFiZWwuY2hhckF0KDApID09PSBcInhcIiA/IFwiMS43NWVtXCIgOiBcIjMuMGVtXCIpO1xuICAgIHZhciBub2RlO1xuXG4gICAgaWYgKGdyb3VwLmJvZHkpIHtcbiAgICAgIHZhciB1cHBlck5vZGUgPSBwYWRkZWROb2RlKGJ1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuXG4gICAgICBpZiAoZ3JvdXAuYmVsb3cpIHtcbiAgICAgICAgdmFyIGxvd2VyTm9kZSA9IHBhZGRlZE5vZGUoYnVpbGRHcm91cChncm91cC5iZWxvdywgb3B0aW9ucykpO1xuICAgICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdW5kZXJvdmVyXCIsIFthcnJvd05vZGUsIGxvd2VyTm9kZSwgdXBwZXJOb2RlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb3ZlclwiLCBbYXJyb3dOb2RlLCB1cHBlck5vZGVdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGdyb3VwLmJlbG93KSB7XG4gICAgICB2YXIgX2xvd2VyTm9kZSA9IHBhZGRlZE5vZGUoYnVpbGRHcm91cChncm91cC5iZWxvdywgb3B0aW9ucykpO1xuXG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdW5kZXJcIiwgW2Fycm93Tm9kZSwgX2xvd2VyTm9kZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXG4gICAgICAvLyBQYXJzZXIuanMgdGhyb3dzIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vIGFyZ3VtZW50LlxuICAgICAgbm9kZSA9IHBhZGRlZE5vZGUoKTtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vdmVyXCIsIFthcnJvd05vZGUsIG5vZGVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcblxudmFyIG1ha2VTcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW47XG5cbmZ1bmN0aW9uIGh0bWxCdWlsZGVyJDkoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnRzID0gYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSk7XG4gIHJldHVybiBtYWtlU3BhbihbZ3JvdXAubWNsYXNzXSwgZWxlbWVudHMsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBtYXRobWxCdWlsZGVyJDgoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIG5vZGU7XG4gIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1pbm5lclwiKSB7XG4gICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBpbm5lcik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcmRcIikge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtaVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBpbm5lcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtb1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBpbm5lcik7XG4gICAgfSAvLyBTZXQgc3BhY2luZyBiYXNlZCBvbiB3aGF0IGlzIHRoZSBtb3N0IGxpa2VseSBhZGphY2VudCBhdG9tIHR5cGUuXG4gICAgLy8gU2VlIFRlWGJvb2sgcDE3MC5cblxuXG4gICAgaWYgKGdyb3VwLm1jbGFzcyA9PT0gXCJtYmluXCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjAuMjJlbVwiOyAvLyBtZWRpdW0gc3BhY2VcblxuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4yMmVtXCI7XG4gICAgfSBlbHNlIGlmIChncm91cC5tY2xhc3MgPT09IFwibXB1bmN0XCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjBlbVwiO1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4xN2VtXCI7IC8vIHRoaW5zcGFjZVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcGVuXCIgfHwgZ3JvdXAubWNsYXNzID09PSBcIm1jbG9zZVwiKSB7XG4gICAgICBub2RlLmF0dHJpYnV0ZXMubHNwYWNlID0gXCIwZW1cIjtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5yc3BhY2UgPSBcIjBlbVwiO1xuICAgIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1pbm5lclwiKSB7XG4gICAgICBub2RlLmF0dHJpYnV0ZXMubHNwYWNlID0gXCIwLjA1NTZlbVwiOyAvLyAxIG11IGlzIHRoZSBtb3N0IGxpa2VseSBvcHRpb25cblxuICAgICAgbm9kZS5hdHRyaWJ1dGVzLndpZHRoID0gXCIrMC4xMTExZW1cIjtcbiAgICB9IC8vIE1hdGhNTCA8bW8+IGRlZmF1bHQgc3BhY2UgaXMgNS8xOCBlbSwgc28gPG1yZWw+IG5lZWRzIG5vIGFjdGlvbi5cbiAgICAvLyBSZWY6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL01hdGhNTC9FbGVtZW50L21vXG5cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSAvLyBNYXRoIGNsYXNzIGNvbW1hbmRzIGV4Y2VwdCBcXG1hdGhvcFxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtY2xhc3NcIixcbiAgbmFtZXM6IFtcIlxcXFxtYXRob3JkXCIsIFwiXFxcXG1hdGhiaW5cIiwgXCJcXFxcbWF0aHJlbFwiLCBcIlxcXFxtYXRob3BlblwiLCBcIlxcXFxtYXRoY2xvc2VcIiwgXCJcXFxcbWF0aHB1bmN0XCIsIFwiXFxcXG1hdGhpbm5lclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtY2xhc3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBcIm1cIiArIGZ1bmNOYW1lLnNsaWNlKDUpLFxuICAgICAgLy8gVE9ETyhrZXZpbmIpOiBkb24ndCBwcmVmaXggd2l0aCAnbSdcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJvZHkpXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkOSxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ4XG59KTtcbnZhciBiaW5yZWxDbGFzcyA9IGFyZyA9PiB7XG4gIC8vIFxcYmlucmVsQCBzcGFjaW5nIHZhcmllcyB3aXRoIChiaW58cmVsfG9yZCkgb2YgdGhlIGF0b20gaW4gdGhlIGFyZ3VtZW50LlxuICAvLyAoYnkgcmVuZGVyaW5nIHNlcGFyYXRlbHkgYW5kIHdpdGgge31zIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZCBtZWFzdXJpbmdcbiAgLy8gdGhlIGNoYW5nZSBpbiBzcGFjaW5nKS4gIFdlJ2xsIGRvIHJvdWdobHkgdGhlIHNhbWUgYnkgZGV0ZWN0aW5nIHRoZVxuICAvLyBhdG9tIHR5cGUgZGlyZWN0bHkuXG4gIHZhciBhdG9tID0gYXJnLnR5cGUgPT09IFwib3JkZ3JvdXBcIiAmJiBhcmcuYm9keS5sZW5ndGggPyBhcmcuYm9keVswXSA6IGFyZztcblxuICBpZiAoYXRvbS50eXBlID09PSBcImF0b21cIiAmJiAoYXRvbS5mYW1pbHkgPT09IFwiYmluXCIgfHwgYXRvbS5mYW1pbHkgPT09IFwicmVsXCIpKSB7XG4gICAgcmV0dXJuIFwibVwiICsgYXRvbS5mYW1pbHk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwibW9yZFwiO1xuICB9XG59OyAvLyBcXEBiaW5yZWx7eH17eX0gcmVuZGVycyBsaWtlIHkgYnV0IGFzIG1iaW4vbXJlbC9tb3JkIGlmIHggaXMgbWJpbi9tcmVsL21vcmQuXG4vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gXFxiaW5yZWxAe3h9XFxiaW5yZWxAQHt5fSBpbiBBTVNUZVguXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtY2xhc3NcIixcbiAgbmFtZXM6IFtcIlxcXFxAYmlucmVsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDJcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYyLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtY2xhc3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBiaW5yZWxDbGFzcyhhcmdzWzBdKSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGFyZ3NbMV0pLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGFyZ3NbMV0pXG4gICAgfTtcbiAgfVxuXG59KTsgLy8gQnVpbGQgYSByZWxhdGlvbiBvciBzdGFja2VkIG9wIGJ5IHBsYWNpbmcgb25lIHN5bWJvbCBvbiB0b3Agb2YgYW5vdGhlclxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWNsYXNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcc3RhY2tyZWxcIiwgXCJcXFxcb3ZlcnNldFwiLCBcIlxcXFx1bmRlcnNldFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMywgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMztcbiAgICB2YXIgYmFzZUFyZyA9IGFyZ3NbMV07XG4gICAgdmFyIHNoaWZ0ZWRBcmcgPSBhcmdzWzBdO1xuICAgIHZhciBtY2xhc3M7XG5cbiAgICBpZiAoZnVuY05hbWUgIT09IFwiXFxcXHN0YWNrcmVsXCIpIHtcbiAgICAgIC8vIExhVGVYIGFwcGxpZXMgXFxiaW5yZWwgc3BhY2luZyB0byBcXG92ZXJzZXQgYW5kIFxcdW5kZXJzZXQuXG4gICAgICBtY2xhc3MgPSBiaW5yZWxDbGFzcyhiYXNlQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWNsYXNzID0gXCJtcmVsXCI7IC8vIGZvciBcXHN0YWNrcmVsXG4gICAgfVxuXG4gICAgdmFyIGJhc2VPcCA9IHtcbiAgICAgIHR5cGU6IFwib3BcIixcbiAgICAgIG1vZGU6IGJhc2VBcmcubW9kZSxcbiAgICAgIGxpbWl0czogdHJ1ZSxcbiAgICAgIGFsd2F5c0hhbmRsZVN1cFN1YjogdHJ1ZSxcbiAgICAgIHBhcmVudElzU3VwU3ViOiBmYWxzZSxcbiAgICAgIHN5bWJvbDogZmFsc2UsXG4gICAgICBzdXBwcmVzc0Jhc2VTaGlmdDogZnVuY05hbWUgIT09IFwiXFxcXHN0YWNrcmVsXCIsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChiYXNlQXJnKVxuICAgIH07XG4gICAgdmFyIHN1cHN1YiA9IHtcbiAgICAgIHR5cGU6IFwic3Vwc3ViXCIsXG4gICAgICBtb2RlOiBzaGlmdGVkQXJnLm1vZGUsXG4gICAgICBiYXNlOiBiYXNlT3AsXG4gICAgICBzdXA6IGZ1bmNOYW1lID09PSBcIlxcXFx1bmRlcnNldFwiID8gbnVsbCA6IHNoaWZ0ZWRBcmcsXG4gICAgICBzdWI6IGZ1bmNOYW1lID09PSBcIlxcXFx1bmRlcnNldFwiID8gc2hpZnRlZEFyZyA6IG51bGxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1jbGFzc1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBtY2xhc3MsXG4gICAgICBib2R5OiBbc3Vwc3ViXSxcbiAgICAgIGlzQ2hhcmFjdGVyQm94OiB1dGlscy5pc0NoYXJhY3RlckJveChzdXBzdWIpXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkOSxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ4XG59KTtcblxuLy8gXFxwbWIgaXMgYSBzaW11bGF0aW9uIG9mIGJvbGQgZm9udC5cbi8vIFRoZSB2ZXJzaW9uIG9mIFxccG1iIGluIGFtYnN5LnN0eSB3b3JrcyBieSB0eXBlc2V0dGluZyB0aHJlZSBjb3BpZXNcbi8vIHdpdGggc21hbGwgb2Zmc2V0cy4gV2UgdXNlIENTUyB0ZXh0LXNoYWRvdy5cbi8vIEl0J3MgYSBoYWNrLiBOb3QgYXMgZ29vZCBhcyBhIHJlYWwgYm9sZCBmb250LiBCZXR0ZXIgdGhhbiBub3RoaW5nLlxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInBtYlwiLFxuICBuYW1lczogW1wiXFxcXHBtYlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicG1iXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogYmlucmVsQ2xhc3MoYXJnc1swXSksXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChhcmdzWzBdKVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5ib2R5LCBvcHRpb25zLCB0cnVlKTtcbiAgICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtncm91cC5tY2xhc3NdLCBlbGVtZW50cywgb3B0aW9ucyk7XG4gICAgbm9kZS5zdHlsZS50ZXh0U2hhZG93ID0gXCIwLjAyZW0gMC4wMWVtIDAuMDRweFwiO1xuICAgIHJldHVybiBub2RlO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIHN0eWxlKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIHN0eWxlKTsgLy8gV3JhcCB3aXRoIGFuIDxtc3R5bGU+IGVsZW1lbnQuXG5cbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIGlubmVyKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwidGV4dC1zaGFkb3c6IDAuMDJlbSAwLjAxZW0gMC4wNHB4XCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuXG52YXIgY2RBcnJvd0Z1bmN0aW9uTmFtZSA9IHtcbiAgXCI+XCI6IFwiXFxcXFxcXFxjZHJpZ2h0YXJyb3dcIixcbiAgXCI8XCI6IFwiXFxcXFxcXFxjZGxlZnRhcnJvd1wiLFxuICBcIj1cIjogXCJcXFxcXFxcXGNkbG9uZ2VxdWFsXCIsXG4gIFwiQVwiOiBcIlxcXFx1cGFycm93XCIsXG4gIFwiVlwiOiBcIlxcXFxkb3duYXJyb3dcIixcbiAgXCJ8XCI6IFwiXFxcXFZlcnRcIixcbiAgXCIuXCI6IFwibm8gYXJyb3dcIlxufTtcblxudmFyIG5ld0NlbGwgPSAoKSA9PiB7XG4gIC8vIENyZWF0ZSBhbiBlbXB0eSBjZWxsLCB0byBiZSBmaWxsZWQgYmVsb3cgd2l0aCBwYXJzZSBub2Rlcy5cbiAgLy8gVGhlIHBhcnNlVHJlZSBmcm9tIHRoaXMgbW9kdWxlIG11c3QgYmUgY29uc3RydWN0ZWQgbGlrZSB0aGVcbiAgLy8gb25lIGNyZWF0ZWQgYnkgcGFyc2VBcnJheSgpLCBzbyBhbiBlbXB0eSBDRCBjZWxsIG11c3RcbiAgLy8gYmUgYSBQYXJzZU5vZGU8XCJzdHlsaW5nXCI+LiBBbmQgQ0QgaXMgYWx3YXlzIGRpc3BsYXlzdHlsZS5cbiAgLy8gU28gdGhlc2UgdmFsdWVzIGFyZSBmaXhlZCBhbmQgZmxvdyBjYW4gZG8gaW1wbGljaXQgdHlwaW5nLlxuICByZXR1cm4ge1xuICAgIHR5cGU6IFwic3R5bGluZ1wiLFxuICAgIGJvZHk6IFtdLFxuICAgIG1vZGU6IFwibWF0aFwiLFxuICAgIHN0eWxlOiBcImRpc3BsYXlcIlxuICB9O1xufTtcblxudmFyIGlzU3RhcnRPZkFycm93ID0gbm9kZSA9PiB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09IFwidGV4dG9yZFwiICYmIG5vZGUudGV4dCA9PT0gXCJAXCI7XG59O1xuXG52YXIgaXNMYWJlbEVuZCA9IChub2RlLCBlbmRDaGFyKSA9PiB7XG4gIHJldHVybiAobm9kZS50eXBlID09PSBcIm1hdGhvcmRcIiB8fCBub2RlLnR5cGUgPT09IFwiYXRvbVwiKSAmJiBub2RlLnRleHQgPT09IGVuZENoYXI7XG59O1xuXG5mdW5jdGlvbiBjZEFycm93KGFycm93Q2hhciwgbGFiZWxzLCBwYXJzZXIpIHtcbiAgLy8gUmV0dXJuIGEgcGFyc2UgdHJlZSBvZiBhbiBhcnJvdyBhbmQgaXRzIGxhYmVscy5cbiAgLy8gVGhpcyBhY3RzIGluIGEgd2F5IHNpbWlsYXIgdG8gYSBtYWNybyBleHBhbnNpb24uXG4gIHZhciBmdW5jTmFtZSA9IGNkQXJyb3dGdW5jdGlvbk5hbWVbYXJyb3dDaGFyXTtcblxuICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgY2FzZSBcIlxcXFxcXFxcY2RyaWdodGFycm93XCI6XG4gICAgY2FzZSBcIlxcXFxcXFxcY2RsZWZ0YXJyb3dcIjpcbiAgICAgIHJldHVybiBwYXJzZXIuY2FsbEZ1bmN0aW9uKGZ1bmNOYW1lLCBbbGFiZWxzWzBdXSwgW2xhYmVsc1sxXV0pO1xuXG4gICAgY2FzZSBcIlxcXFx1cGFycm93XCI6XG4gICAgY2FzZSBcIlxcXFxkb3duYXJyb3dcIjpcbiAgICAgIHtcbiAgICAgICAgdmFyIGxlZnRMYWJlbCA9IHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcXFxcXGNkbGVmdFwiLCBbbGFiZWxzWzBdXSwgW10pO1xuICAgICAgICB2YXIgYmFyZUFycm93ID0ge1xuICAgICAgICAgIHR5cGU6IFwiYXRvbVwiLFxuICAgICAgICAgIHRleHQ6IGZ1bmNOYW1lLFxuICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgIGZhbWlseTogXCJyZWxcIlxuICAgICAgICB9O1xuICAgICAgICB2YXIgc2l6ZWRBcnJvdyA9IHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcQmlnXCIsIFtiYXJlQXJyb3ddLCBbXSk7XG4gICAgICAgIHZhciByaWdodExhYmVsID0gcGFyc2VyLmNhbGxGdW5jdGlvbihcIlxcXFxcXFxcY2RyaWdodFwiLCBbbGFiZWxzWzFdXSwgW10pO1xuICAgICAgICB2YXIgYXJyb3dHcm91cCA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogXCJtYXRoXCIsXG4gICAgICAgICAgYm9keTogW2xlZnRMYWJlbCwgc2l6ZWRBcnJvdywgcmlnaHRMYWJlbF1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcXFxcXGNkcGFyZW50XCIsIFthcnJvd0dyb3VwXSwgW10pO1xuICAgICAgfVxuXG4gICAgY2FzZSBcIlxcXFxcXFxcY2Rsb25nZXF1YWxcIjpcbiAgICAgIHJldHVybiBwYXJzZXIuY2FsbEZ1bmN0aW9uKFwiXFxcXFxcXFxjZGxvbmdlcXVhbFwiLCBbXSwgW10pO1xuXG4gICAgY2FzZSBcIlxcXFxWZXJ0XCI6XG4gICAgICB7XG4gICAgICAgIHZhciBhcnJvdyA9IHtcbiAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICB0ZXh0OiBcIlxcXFxWZXJ0XCIsXG4gICAgICAgICAgbW9kZTogXCJtYXRoXCJcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcQmlnXCIsIFthcnJvd10sIFtdKTtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgdGV4dDogXCIgXCIsXG4gICAgICAgIG1vZGU6IFwibWF0aFwiXG4gICAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ0QocGFyc2VyKSB7XG4gIC8vIEdldCB0aGUgYXJyYXkncyBwYXJzZSBub2RlcyB3aXRoIFxcXFwgdGVtcG9yYXJpbHkgbWFwcGVkIHRvIFxcY3IuXG4gIHZhciBwYXJzZWRSb3dzID0gW107XG4gIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5zZXQoXCJcXFxcY3JcIiwgXCJcXFxcXFxcXFxcXFxyZWxheFwiKTtcbiAgcGFyc2VyLmd1bGxldC5iZWdpbkdyb3VwKCk7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgIC8vIEdldCB0aGUgcGFyc2Ugbm9kZXMgZm9yIHRoZSBuZXh0IHJvdy5cbiAgICBwYXJzZWRSb3dzLnB1c2gocGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgXCJcXFxcXFxcXFwiKSk7XG4gICAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpO1xuICAgIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICAgIHZhciBuZXh0ID0gcGFyc2VyLmZldGNoKCkudGV4dDtcblxuICAgIGlmIChuZXh0ID09PSBcIiZcIiB8fCBuZXh0ID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxlbmRcIikge1xuICAgICAgaWYgKHBhcnNlZFJvd3NbcGFyc2VkUm93cy5sZW5ndGggLSAxXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcGFyc2VkUm93cy5wb3AoKTsgLy8gZmluYWwgcm93IGVuZGVkIGluIFxcXFxcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiRXhwZWN0ZWQgXFxcXFxcXFwgb3IgXFxcXGNyIG9yIFxcXFxlbmRcIiwgcGFyc2VyLm5leHRUb2tlbik7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJvdyA9IFtdO1xuICB2YXIgYm9keSA9IFtyb3ddOyAvLyBMb29wIHRocnUgdGhlIHBhcnNlIG5vZGVzLiBDb2xsZWN0IHRoZW0gaW50byBjZWxscyBhbmQgYXJyb3dzLlxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyc2VkUm93cy5sZW5ndGg7IGkrKykge1xuICAgIC8vIFN0YXJ0IGEgbmV3IHJvdy5cbiAgICB2YXIgcm93Tm9kZXMgPSBwYXJzZWRSb3dzW2ldOyAvLyBDcmVhdGUgdGhlIGZpcnN0IGNlbGwuXG5cbiAgICB2YXIgY2VsbCA9IG5ld0NlbGwoKTtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93Tm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmICghaXNTdGFydE9mQXJyb3cocm93Tm9kZXNbal0pKSB7XG4gICAgICAgIC8vIElmIGEgcGFyc2VOb2RlIGlzIG5vdCBhbiBhcnJvdywgaXQgZ29lcyBpbnRvIGEgY2VsbC5cbiAgICAgICAgY2VsbC5ib2R5LnB1c2gocm93Tm9kZXNbal0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUGFyc2Ugbm9kZSBqIGlzIGFuIFwiQFwiLCB0aGUgc3RhcnQgb2YgYW4gYXJyb3cuXG4gICAgICAgIC8vIEJlZm9yZSBzdGFydGluZyBvbiB0aGUgYXJyb3csIHB1c2ggdGhlIGNlbGwgaW50byBgcm93YC5cbiAgICAgICAgcm93LnB1c2goY2VsbCk7IC8vIE5vdyBjb2xsZWN0IHBhcnNlTm9kZXMgaW50byBhbiBhcnJvdy5cbiAgICAgICAgLy8gVGhlIGNoYXJhY3RlciBhZnRlciBcIkBcIiBkZWZpbmVzIHRoZSBhcnJvdyB0eXBlLlxuXG4gICAgICAgIGogKz0gMTtcbiAgICAgICAgdmFyIGFycm93Q2hhciA9IGFzc2VydFN5bWJvbE5vZGVUeXBlKHJvd05vZGVzW2pdKS50ZXh0OyAvLyBDcmVhdGUgdHdvIGVtcHR5IGxhYmVsIG5vZGVzLiBXZSBtYXkgb3IgbWF5IG5vdCB1c2UgdGhlbS5cblxuICAgICAgICB2YXIgbGFiZWxzID0gbmV3IEFycmF5KDIpO1xuICAgICAgICBsYWJlbHNbMF0gPSB7XG4gICAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgIGJvZHk6IFtdXG4gICAgICAgIH07XG4gICAgICAgIGxhYmVsc1sxXSA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogXCJtYXRoXCIsXG4gICAgICAgICAgYm9keTogW11cbiAgICAgICAgfTsgLy8gUHJvY2VzcyB0aGUgYXJyb3cuXG5cbiAgICAgICAgaWYgKFwiPXwuXCIuaW5kZXhPZihhcnJvd0NoYXIpID4gLTEpIDsgZWxzZSBpZiAoXCI8PkFWXCIuaW5kZXhPZihhcnJvd0NoYXIpID4gLTEpIHtcbiAgICAgICAgICAvLyBGb3VyIGFycm93cywgYEA+Pj5gLCBgQDw8PGAsIGBAQUFBYCwgYW5kIGBAVlZWYCwgZWFjaCB0YWtlXG4gICAgICAgICAgLy8gdHdvIG9wdGlvbmFsIGxhYmVscy4gRS5nLiB0aGUgcmlnaHQtcG9pbnQgYXJyb3cgc3ludGF4IGlzXG4gICAgICAgICAgLy8gcmVhbGx5OiAgQD57b3B0aW9uYWwgbGFiZWx9PntvcHRpb25hbCBsYWJlbH0+XG4gICAgICAgICAgLy8gQ29sbGVjdCBwYXJzZU5vZGVzIGludG8gbGFiZWxzLlxuICAgICAgICAgIGZvciAodmFyIGxhYmVsTnVtID0gMDsgbGFiZWxOdW0gPCAyOyBsYWJlbE51bSsrKSB7XG4gICAgICAgICAgICB2YXIgaW5MYWJlbCA9IHRydWU7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgPSBqICsgMTsgayA8IHJvd05vZGVzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgIGlmIChpc0xhYmVsRW5kKHJvd05vZGVzW2tdLCBhcnJvd0NoYXIpKSB7XG4gICAgICAgICAgICAgICAgaW5MYWJlbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGogPSBrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGlzU3RhcnRPZkFycm93KHJvd05vZGVzW2tdKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTWlzc2luZyBhIFwiICsgYXJyb3dDaGFyICsgXCIgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIGEgQ0QgYXJyb3cuXCIsIHJvd05vZGVzW2tdKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGxhYmVsc1tsYWJlbE51bV0uYm9keS5wdXNoKHJvd05vZGVzW2tdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluTGFiZWwpIHtcbiAgICAgICAgICAgICAgLy8gaXNMYWJlbEVuZCBuZXZlciByZXR1cm5lZCBhIHRydWUuXG4gICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTWlzc2luZyBhIFwiICsgYXJyb3dDaGFyICsgXCIgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIGEgQ0QgYXJyb3cuXCIsIHJvd05vZGVzW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCBvbmUgb2YgXFxcIjw+QVY9fC5cXFwiIGFmdGVyIEBcIiwgcm93Tm9kZXNbal0pO1xuICAgICAgICB9IC8vIE5vdyBqb2luIHRoZSBhcnJvdyB0byBpdHMgbGFiZWxzLlxuXG5cbiAgICAgICAgdmFyIGFycm93ID0gY2RBcnJvdyhhcnJvd0NoYXIsIGxhYmVscywgcGFyc2VyKTsgLy8gV3JhcCB0aGUgYXJyb3cgaW4gIFBhcnNlTm9kZTxcInN0eWxpbmdcIj4uXG4gICAgICAgIC8vIFRoaXMgaXMgZG9uZSB0byBtYXRjaCBwYXJzZUFycmF5KCkgYmVoYXZpb3IuXG5cbiAgICAgICAgdmFyIHdyYXBwZWRBcnJvdyA9IHtcbiAgICAgICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgICAgICBib2R5OiBbYXJyb3ddLFxuICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgIHN0eWxlOiBcImRpc3BsYXlcIiAvLyBDRCBpcyBhbHdheXMgZGlzcGxheXN0eWxlLlxuXG4gICAgICAgIH07XG4gICAgICAgIHJvdy5wdXNoKHdyYXBwZWRBcnJvdyk7IC8vIEluIENEJ3Mgc3ludGF4LCBjZWxscyBhcmUgaW1wbGljaXQuIFRoYXQgaXMsIGV2ZXJ5dGhpbmcgdGhhdFxuICAgICAgICAvLyBpcyBub3QgYW4gYXJyb3cgZ2V0cyBjb2xsZWN0ZWQgaW50byBhIGNlbGwuIFNvIGNyZWF0ZSBhbiBlbXB0eVxuICAgICAgICAvLyBjZWxsIG5vdy4gSXQgd2lsbCBjb2xsZWN0IHVwY29taW5nIHBhcnNlTm9kZXMuXG5cbiAgICAgICAgY2VsbCA9IG5ld0NlbGwoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSAlIDIgPT09IDApIHtcbiAgICAgIC8vIEV2ZW4tbnVtYmVyZWQgcm93cyBjb25zaXN0IG9mOiBjZWxsLCBhcnJvdywgY2VsbCwgYXJyb3csIC4uLiBjZWxsXG4gICAgICAvLyBUaGUgbGFzdCBjZWxsIGlzIG5vdCB5ZXQgcHVzaGVkIGludG8gYHJvd2AsIHNvOlxuICAgICAgcm93LnB1c2goY2VsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE9kZC1udW1iZXJlZCByb3dzIGNvbnNpc3Qgb2Y6IHZlcnQgYXJyb3csIGVtcHR5IGNlbGwsIC4uLiB2ZXJ0IGFycm93XG4gICAgICAvLyBSZW1vdmUgdGhlIGVtcHR5IGNlbGwgdGhhdCB3YXMgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHJvd2AuXG4gICAgICByb3cuc2hpZnQoKTtcbiAgICB9XG5cbiAgICByb3cgPSBbXTtcbiAgICBib2R5LnB1c2gocm93KTtcbiAgfSAvLyBFbmQgcm93IGdyb3VwXG5cblxuICBwYXJzZXIuZ3VsbGV0LmVuZEdyb3VwKCk7IC8vIEVuZCBhcnJheSBncm91cCBkZWZpbmluZyBcXFxcXG5cbiAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpOyAvLyBkZWZpbmUgY29sdW1uIHNlcGFyYXRpb24uXG5cbiAgdmFyIGNvbHMgPSBuZXcgQXJyYXkoYm9keVswXS5sZW5ndGgpLmZpbGwoe1xuICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICBhbGlnbjogXCJjXCIsXG4gICAgcHJlZ2FwOiAwLjI1LFxuICAgIC8vIENEIHBhY2thZ2Ugc2V0cyBcXGVuc2tpcCBiZXR3ZWVuIGNvbHVtbnMuXG4gICAgcG9zdGdhcDogMC4yNSAvLyBTbyBwcmUgYW5kIHBvc3QgZWFjaCBnZXQgaGFsZiBhbiBcXGVuc2tpcCwgaS5lLiAwLjI1ZW0uXG5cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIG1vZGU6IFwibWF0aFwiLFxuICAgIGJvZHksXG4gICAgYXJyYXlzdHJldGNoOiAxLFxuICAgIGFkZEpvdDogdHJ1ZSxcbiAgICByb3dHYXBzOiBbbnVsbF0sXG4gICAgY29scyxcbiAgICBjb2xTZXBhcmF0aW9uVHlwZTogXCJDRFwiLFxuICAgIGhMaW5lc0JlZm9yZVJvdzogbmV3IEFycmF5KGJvZHkubGVuZ3RoICsgMSkuZmlsbChbXSlcbiAgfTtcbn0gLy8gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgZ2VuZXJhbCB1c2UuXG4vLyBUaGV5IGFyZSBoZXJlIG9ubHkgZm9yIGludGVybmFsIHVzZSBieSB0aGUge0NEfSBlbnZpcm9ubWVudCBpbiBwbGFjaW5nIGxhYmVsc1xuLy8gbmV4dCB0byB2ZXJ0aWNhbCBhcnJvd3MuXG4vLyBXZSBkb24ndCBuZWVkIGFueSBzdWNoIGZ1bmN0aW9ucyBmb3IgaG9yaXpvbnRhbCBhcnJvd3MgYmVjYXVzZSB3ZSBjYW4gcmV1c2Vcbi8vIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgYWxyZWFkeSBleGlzdHMgZm9yIGV4dGVuc2libGUgYXJyb3dzLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY2RsYWJlbFwiLFxuICBuYW1lczogW1wiXFxcXFxcXFxjZGxlZnRcIiwgXCJcXFxcXFxcXGNkcmlnaHRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNkbGFiZWxcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgc2lkZTogZnVuY05hbWUuc2xpY2UoNCksXG4gICAgICBsYWJlbDogYXJnc1swXVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS5zdXAoKSk7XG4gICAgdmFyIGxhYmVsID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkR3JvdXAkMShncm91cC5sYWJlbCwgbmV3T3B0aW9ucywgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIGxhYmVsLmNsYXNzZXMucHVzaChcImNkLWxhYmVsLVwiICsgZ3JvdXAuc2lkZSk7XG4gICAgbGFiZWwuc3R5bGUuYm90dG9tID0gbWFrZUVtKDAuOCAtIGxhYmVsLmRlcHRoKTsgLy8gWmVybyBvdXQgbGFiZWwgaGVpZ2h0ICYgZGVwdGgsIHNvIHZlcnRpY2FsIGFsaWduIG9mIGFycm93IGlzIHNldFxuICAgIC8vIGJ5IHRoZSBhcnJvdyBoZWlnaHQsIG5vdCBieSB0aGUgbGFiZWwuXG5cbiAgICBsYWJlbC5oZWlnaHQgPSAwO1xuICAgIGxhYmVsLmRlcHRoID0gMDtcbiAgICByZXR1cm4gbGFiZWw7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBsYWJlbCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBbYnVpbGRHcm91cChncm91cC5sYWJlbCwgb3B0aW9ucyldKTtcbiAgICBsYWJlbCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbbGFiZWxdKTtcbiAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBcIik7XG5cbiAgICBpZiAoZ3JvdXAuc2lkZSA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgIGxhYmVsLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBcIi0xd2lkdGhcIik7XG4gICAgfSAvLyBXZSBoYXZlIHRvIGd1ZXNzIGF0IHZlcnRpY2FsIGFsaWdubWVudC4gV2Uga25vdyB0aGUgYXJyb3cgaXMgMS44ZW0gdGFsbCxcbiAgICAvLyBCdXQgd2UgZG9uJ3Qga25vdyB0aGUgaGVpZ2h0IG9yIGRlcHRoIG9mIHRoZSBsYWJlbC5cblxuXG4gICAgbGFiZWwuc2V0QXR0cmlidXRlKFwidm9mZnNldFwiLCBcIjAuN2VtXCIpO1xuICAgIGxhYmVsID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgW2xhYmVsXSk7XG4gICAgbGFiZWwuc2V0QXR0cmlidXRlKFwiZGlzcGxheXN0eWxlXCIsIFwiZmFsc2VcIik7XG4gICAgbGFiZWwuc2V0QXR0cmlidXRlKFwic2NyaXB0bGV2ZWxcIiwgXCIxXCIpO1xuICAgIHJldHVybiBsYWJlbDtcbiAgfVxuXG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJjZGxhYmVscGFyZW50XCIsXG4gIG5hbWVzOiBbXCJcXFxcXFxcXGNkcGFyZW50XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYyLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJjZGxhYmVscGFyZW50XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGZyYWdtZW50OiBhcmdzWzBdXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFdyYXAgdGhlIHZlcnRpY2FsIGFycm93IGFuZCBpdHMgbGFiZWxzLlxuICAgIC8vIFRoZSBwYXJlbnQgZ2V0cyBwb3NpdGlvbjogcmVsYXRpdmUuIFRoZSBjaGlsZCBnZXRzIHBvc2l0aW9uOiBhYnNvbHV0ZS5cbiAgICAvLyBTbyBDU1MgY2FuIGxvY2F0ZSB0aGUgbGFiZWwgY29ycmVjdGx5LlxuICAgIHZhciBwYXJlbnQgPSBidWlsZENvbW1vbi53cmFwRnJhZ21lbnQoYnVpbGRHcm91cCQxKGdyb3VwLmZyYWdtZW50LCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgcGFyZW50LmNsYXNzZXMucHVzaChcImNkLXZlcnQtYXJyb3dcIik7XG4gICAgcmV0dXJuIHBhcmVudDtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBbYnVpbGRHcm91cChncm91cC5mcmFnbWVudCwgb3B0aW9ucyldKTtcbiAgfVxuXG59KTtcblxuLy8gezEyM30gYW5kIGNvbnZlcnRzIGludG8gc3ltYm9sIHdpdGggY29kZSAxMjMuICBJdCBpcyB1c2VkIGJ5IHRoZSAqbWFjcm8qXG4vLyBcXGNoYXIgZGVmaW5lZCBpbiBtYWNyb3MuanMuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gIG5hbWVzOiBbXCJcXFxcQGNoYXJcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBhcmcgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpO1xuICAgIHZhciBncm91cCA9IGFyZy5ib2R5O1xuICAgIHZhciBudW1iZXIgPSBcIlwiO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnROb2RlVHlwZShncm91cFtpXSwgXCJ0ZXh0b3JkXCIpO1xuICAgICAgbnVtYmVyICs9IG5vZGUudGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY29kZSA9IHBhcnNlSW50KG51bWJlcik7XG4gICAgdmFyIHRleHQ7XG5cbiAgICBpZiAoaXNOYU4oY29kZSkpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXEBjaGFyIGhhcyBub24tbnVtZXJpYyBhcmd1bWVudCBcIiArIG51bWJlcik7IC8vIElmIHdlIGRyb3AgSUUgc3VwcG9ydCwgdGhlIGZvbGxvd2luZyBjb2RlIGNvdWxkIGJlIHJlcGxhY2VkIHdpdGhcbiAgICAgIC8vIHRleHQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlKVxuICAgIH0gZWxzZSBpZiAoY29kZSA8IDAgfHwgY29kZSA+PSAweDEwZmZmZikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcQGNoYXIgd2l0aCBpbnZhbGlkIGNvZGUgcG9pbnQgXCIgKyBudW1iZXIpO1xuICAgIH0gZWxzZSBpZiAoY29kZSA8PSAweGZmZmYpIHtcbiAgICAgIHRleHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBc3RyYWwgY29kZSBwb2ludDsgc3BsaXQgaW50byBzdXJyb2dhdGUgaGFsdmVzXG4gICAgICBjb2RlIC09IDB4MTAwMDA7XG4gICAgICB0ZXh0ID0gU3RyaW5nLmZyb21DaGFyQ29kZSgoY29kZSA+PiAxMCkgKyAweGQ4MDAsIChjb2RlICYgMHgzZmYpICsgMHhkYzAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHRleHQ6IHRleHRcbiAgICB9O1xuICB9XG5cbn0pO1xuXG52YXIgaHRtbEJ1aWxkZXIkOCA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5ib2R5LCBvcHRpb25zLndpdGhDb2xvcihncm91cC5jb2xvciksIGZhbHNlKTsgLy8gXFxjb2xvciBpc24ndCBzdXBwb3NlZCB0byBhZmZlY3QgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzIGl0IGNvbnRhaW5zLlxuICAvLyBUbyBhY2NvbXBsaXNoIHRoaXMsIHdlIHdyYXAgdGhlIHJlc3VsdHMgaW4gYSBmcmFnbWVudCwgc28gdGhlIGlubmVyXG4gIC8vIGVsZW1lbnRzIHdpbGwgYmUgYWJsZSB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZWlyIG5laWdoYm9ycy4gRm9yXG4gIC8vIGV4YW1wbGUsIGBcXGNvbG9ye3JlZH17MiArfSAzYCBoYXMgdGhlIHNhbWUgc3BhY2luZyBhcyBgMiArIDNgXG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG59O1xuXG52YXIgbWF0aG1sQnVpbGRlciQ3ID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLndpdGhDb2xvcihncm91cC5jb2xvcikpO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIGlubmVyKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJtYXRoY29sb3JcIiwgZ3JvdXAuY29sb3IpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJjb2xvclwiLFxuICBuYW1lczogW1wiXFxcXHRleHRjb2xvclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCIsIFwib3JpZ2luYWxcIl1cbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGNvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29sb3JcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgY29sb3IsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDgsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkN1xufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY29sb3JcIixcbiAgbmFtZXM6IFtcIlxcXFxjb2xvclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCJdXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBicmVha09uVG9rZW5UZXh0XG4gICAgfSA9IF9yZWYyO1xuICAgIHZhciBjb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7IC8vIFNldCBtYWNybyBcXGN1cnJlbnRAY29sb3IgaW4gY3VycmVudCBuYW1lc3BhY2UgdG8gc3RvcmUgdGhlIGN1cnJlbnRcbiAgICAvLyBjb2xvciwgbWltaWNraW5nIHRoZSBiZWhhdmlvciBvZiBjb2xvci5zdHkuXG4gICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgdXNlZCBqdXN0IHRvIGNvcnJlY3RseSBjb2xvciBhIFxccmlnaHRcbiAgICAvLyB0aGF0IGZvbGxvd3MgYSBcXGNvbG9yIGNvbW1hbmQuXG5cbiAgICBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5zZXQoXCJcXFxcY3VycmVudEBjb2xvclwiLCBjb2xvcik7IC8vIFBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keSB0aGF0IHNob3VsZCBiZSBjb2xvcmVkLlxuXG4gICAgdmFyIGJvZHkgPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKHRydWUsIGJyZWFrT25Ub2tlblRleHQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNvbG9yXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbG9yLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDgsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkN1xufSk7XG5cbi8vIFJvdyBicmVha3Mgd2l0aGluIHRhYnVsYXIgZW52aXJvbm1lbnRzLCBhbmQgbGluZSBicmVha3MgYXQgdG9wIGxldmVsXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJjclwiLFxuICBuYW1lczogW1wiXFxcXFxcXFxcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgc2l6ZSA9IHBhcnNlci5ndWxsZXQuZnV0dXJlKCkudGV4dCA9PT0gXCJbXCIgPyBwYXJzZXIucGFyc2VTaXplR3JvdXAodHJ1ZSkgOiBudWxsO1xuICAgIHZhciBuZXdMaW5lID0gIXBhcnNlci5zZXR0aW5ncy5kaXNwbGF5TW9kZSB8fCAhcGFyc2VyLnNldHRpbmdzLnVzZVN0cmljdEJlaGF2aW9yKFwibmV3TGluZUluRGlzcGxheU1vZGVcIiwgXCJJbiBMYVRlWCwgXFxcXFxcXFwgb3IgXFxcXG5ld2xpbmUgXCIgKyBcImRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGVcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY3JcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbmV3TGluZSxcbiAgICAgIHNpemU6IHNpemUgJiYgYXNzZXJ0Tm9kZVR5cGUoc2l6ZSwgXCJzaXplXCIpLnZhbHVlXG4gICAgfTtcbiAgfSxcblxuICAvLyBUaGUgZm9sbG93aW5nIGJ1aWxkZXJzIGFyZSBjYWxsZWQgb25seSBhdCB0aGUgdG9wIGxldmVsLFxuICAvLyBub3Qgd2l0aGluIHRhYnVsYXIvYXJyYXkgZW52aXJvbm1lbnRzLlxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXNwYWNlXCJdLCBbXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAubmV3TGluZSkge1xuICAgICAgc3Bhbi5jbGFzc2VzLnB1c2goXCJuZXdsaW5lXCIpO1xuXG4gICAgICBpZiAoZ3JvdXAuc2l6ZSkge1xuICAgICAgICBzcGFuLnN0eWxlLm1hcmdpblRvcCA9IG1ha2VFbShjYWxjdWxhdGVTaXplKGdyb3VwLnNpemUsIG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3BhbjtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zcGFjZVwiKTtcblxuICAgIGlmIChncm91cC5uZXdMaW5lKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxpbmVicmVha1wiLCBcIm5ld2xpbmVcIik7XG5cbiAgICAgIGlmIChncm91cC5zaXplKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIG1ha2VFbShjYWxjdWxhdGVTaXplKGdyb3VwLnNpemUsIG9wdGlvbnMpKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5cbnZhciBnbG9iYWxNYXAgPSB7XG4gIFwiXFxcXGdsb2JhbFwiOiBcIlxcXFxnbG9iYWxcIixcbiAgXCJcXFxcbG9uZ1wiOiBcIlxcXFxcXFxcZ2xvYmFsbG9uZ1wiLFxuICBcIlxcXFxcXFxcZ2xvYmFsbG9uZ1wiOiBcIlxcXFxcXFxcZ2xvYmFsbG9uZ1wiLFxuICBcIlxcXFxkZWZcIjogXCJcXFxcZ2RlZlwiLFxuICBcIlxcXFxnZGVmXCI6IFwiXFxcXGdkZWZcIixcbiAgXCJcXFxcZWRlZlwiOiBcIlxcXFx4ZGVmXCIsXG4gIFwiXFxcXHhkZWZcIjogXCJcXFxceGRlZlwiLFxuICBcIlxcXFxsZXRcIjogXCJcXFxcXFxcXGdsb2JhbGxldFwiLFxuICBcIlxcXFxmdXR1cmVsZXRcIjogXCJcXFxcXFxcXGdsb2JhbGZ1dHVyZVwiXG59O1xuXG52YXIgY2hlY2tDb250cm9sU2VxdWVuY2UgPSB0b2sgPT4ge1xuICB2YXIgbmFtZSA9IHRvay50ZXh0O1xuXG4gIGlmICgvXig/OltcXFxce30kJiNeX118RU9GKSQvLnRlc3QobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGEgY29udHJvbCBzZXF1ZW5jZVwiLCB0b2spO1xuICB9XG5cbiAgcmV0dXJuIG5hbWU7XG59O1xuXG52YXIgZ2V0UkhTID0gcGFyc2VyID0+IHtcbiAgdmFyIHRvayA9IHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKTtcblxuICBpZiAodG9rLnRleHQgPT09IFwiPVwiKSB7XG4gICAgLy8gY29uc3VtZSBvcHRpb25hbCBlcXVhbHNcbiAgICB0b2sgPSBwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCk7XG5cbiAgICBpZiAodG9rLnRleHQgPT09IFwiIFwiKSB7XG4gICAgICAvLyBjb25zdW1lIG9uZSBvcHRpb25hbCBzcGFjZVxuICAgICAgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0b2s7XG59O1xuXG52YXIgbGV0Q29tbWFuZCA9IChwYXJzZXIsIG5hbWUsIHRvaywgZ2xvYmFsKSA9PiB7XG4gIHZhciBtYWNybyA9IHBhcnNlci5ndWxsZXQubWFjcm9zLmdldCh0b2sudGV4dCk7XG5cbiAgaWYgKG1hY3JvID09IG51bGwpIHtcbiAgICAvLyBkb24ndCBleHBhbmQgaXQgbGF0ZXIgZXZlbiBpZiBhIG1hY3JvIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBkZWZpbmVkXG4gICAgLy8gZS5nLiwgXFxsZXRcXGZvbz1cXGZyYWMgXFxkZWZcXGZyYWN7XFxyZWxheH0gXFxmcmFjMTJcbiAgICB0b2subm9leHBhbmQgPSB0cnVlO1xuICAgIG1hY3JvID0ge1xuICAgICAgdG9rZW5zOiBbdG9rXSxcbiAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAvLyByZXByb2R1Y2UgdGhlIHNhbWUgYmVoYXZpb3IgaW4gZXhwYW5zaW9uXG4gICAgICB1bmV4cGFuZGFibGU6ICFwYXJzZXIuZ3VsbGV0LmlzRXhwYW5kYWJsZSh0b2sudGV4dClcbiAgICB9O1xuICB9XG5cbiAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KG5hbWUsIG1hY3JvLCBnbG9iYWwpO1xufTsgLy8gPGFzc2lnbm1lbnQ+IC0+IDxub24tbWFjcm8gYXNzaWdubWVudD58PG1hY3JvIGFzc2lnbm1lbnQ+XG4vLyA8bm9uLW1hY3JvIGFzc2lnbm1lbnQ+IC0+IDxzaW1wbGUgYXNzaWdubWVudD58XFxnbG9iYWw8bm9uLW1hY3JvIGFzc2lnbm1lbnQ+XG4vLyA8bWFjcm8gYXNzaWdubWVudD4gLT4gPGRlZmluaXRpb24+fDxwcmVmaXg+PG1hY3JvIGFzc2lnbm1lbnQ+XG4vLyA8cHJlZml4PiAtPiBcXGdsb2JhbHxcXGxvbmd8XFxvdXRlclxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICBuYW1lczogW1wiXFxcXGdsb2JhbFwiLCBcIlxcXFxsb25nXCIsIFwiXFxcXFxcXFxnbG9iYWxsb25nXCIgLy8gY2Fu4oCZdCBiZSBlbnRlcmVkIGRpcmVjdGx5XG4gIF0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICB2YXIgdG9rZW4gPSBwYXJzZXIuZmV0Y2goKTtcblxuICAgIGlmIChnbG9iYWxNYXBbdG9rZW4udGV4dF0pIHtcbiAgICAgIC8vIEthVGVYIGRvZXNuJ3QgaGF2ZSBcXHBhciwgc28gaWdub3JlIFxcbG9uZ1xuICAgICAgaWYgKGZ1bmNOYW1lID09PSBcIlxcXFxnbG9iYWxcIiB8fCBmdW5jTmFtZSA9PT0gXCJcXFxcXFxcXGdsb2JhbGxvbmdcIikge1xuICAgICAgICB0b2tlbi50ZXh0ID0gZ2xvYmFsTWFwW3Rva2VuLnRleHRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXNzZXJ0Tm9kZVR5cGUocGFyc2VyLnBhcnNlRnVuY3Rpb24oKSwgXCJpbnRlcm5hbFwiKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgdG9rZW4gYWZ0ZXIgbWFjcm8gcHJlZml4XCIsIHRva2VuKTtcbiAgfVxuXG59KTsgLy8gQmFzaWMgc3VwcG9ydCBmb3IgbWFjcm8gZGVmaW5pdGlvbnM6IFxcZGVmLCBcXGdkZWYsIFxcZWRlZiwgXFx4ZGVmXG4vLyA8ZGVmaW5pdGlvbj4gLT4gPGRlZj48Y29udHJvbCBzZXF1ZW5jZT48ZGVmaW5pdGlvbiB0ZXh0PlxuLy8gPGRlZj4gLT4gXFxkZWZ8XFxnZGVmfFxcZWRlZnxcXHhkZWZcbi8vIDxkZWZpbml0aW9uIHRleHQ+IC0+IDxwYXJhbWV0ZXIgdGV4dD48bGVmdCBicmFjZT48YmFsYW5jZWQgdGV4dD48cmlnaHQgYnJhY2U+XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICBuYW1lczogW1wiXFxcXGRlZlwiLCBcIlxcXFxnZGVmXCIsIFwiXFxcXGVkZWZcIiwgXCJcXFxceGRlZlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMikge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMjtcbiAgICB2YXIgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuICAgIHZhciBuYW1lID0gdG9rLnRleHQ7XG5cbiAgICBpZiAoL14oPzpbXFxcXHt9JCYjXl9dfEVPRikkLy50ZXN0KG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGEgY29udHJvbCBzZXF1ZW5jZVwiLCB0b2spO1xuICAgIH1cblxuICAgIHZhciBudW1BcmdzID0gMDtcbiAgICB2YXIgaW5zZXJ0O1xuICAgIHZhciBkZWxpbWl0ZXJzID0gW1tdXTsgLy8gPHBhcmFtZXRlciB0ZXh0PiBjb250YWlucyBubyBicmFjZXNcblxuICAgIHdoaWxlIChwYXJzZXIuZ3VsbGV0LmZ1dHVyZSgpLnRleHQgIT09IFwie1wiKSB7XG4gICAgICB0b2sgPSBwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCk7XG5cbiAgICAgIGlmICh0b2sudGV4dCA9PT0gXCIjXCIpIHtcbiAgICAgICAgLy8gSWYgdGhlIHZlcnkgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIDxwYXJhbWV0ZXIgdGV4dD4gaXMgIywgc28gdGhhdFxuICAgICAgICAvLyB0aGlzICMgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgeywgVGVYIHdpbGwgYmVoYXZlIGFzIGlmIHRoZSB7XG4gICAgICAgIC8vIGhhZCBiZWVuIGluc2VydGVkIGF0IHRoZSByaWdodCBlbmQgb2YgYm90aCB0aGUgcGFyYW1ldGVyIHRleHRcbiAgICAgICAgLy8gYW5kIHRoZSByZXBsYWNlbWVudCB0ZXh0LlxuICAgICAgICBpZiAocGFyc2VyLmd1bGxldC5mdXR1cmUoKS50ZXh0ID09PSBcIntcIikge1xuICAgICAgICAgIGluc2VydCA9IHBhcnNlci5ndWxsZXQuZnV0dXJlKCk7XG4gICAgICAgICAgZGVsaW1pdGVyc1tudW1BcmdzXS5wdXNoKFwie1wiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBBIHBhcmFtZXRlciwgdGhlIGZpcnN0IGFwcGVhcmFuY2Ugb2YgIyBtdXN0IGJlIGZvbGxvd2VkIGJ5IDEsXG4gICAgICAgIC8vIHRoZSBuZXh0IGJ5IDIsIGFuZCBzbyBvbjsgdXAgdG8gbmluZSAj4oCZcyBhcmUgYWxsb3dlZFxuXG5cbiAgICAgICAgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuXG4gICAgICAgIGlmICghL15bMS05XSQvLnRlc3QodG9rLnRleHQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IG51bWJlciBcXFwiXCIgKyB0b2sudGV4dCArIFwiXFxcIlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZUludCh0b2sudGV4dCkgIT09IG51bUFyZ3MgKyAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJBcmd1bWVudCBudW1iZXIgXFxcIlwiICsgdG9rLnRleHQgKyBcIlxcXCIgb3V0IG9mIG9yZGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbnVtQXJncysrO1xuICAgICAgICBkZWxpbWl0ZXJzLnB1c2goW10pO1xuICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJFT0ZcIikge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGEgbWFjcm8gZGVmaW5pdGlvblwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGltaXRlcnNbbnVtQXJnc10ucHVzaCh0b2sudGV4dCk7XG4gICAgICB9XG4gICAgfSAvLyByZXBsYWNlbWVudCB0ZXh0LCBlbmNsb3NlZCBpbiAneycgYW5kICd9JyBhbmQgcHJvcGVybHkgbmVzdGVkXG5cblxuICAgIHZhciB7XG4gICAgICB0b2tlbnNcbiAgICB9ID0gcGFyc2VyLmd1bGxldC5jb25zdW1lQXJnKCk7XG5cbiAgICBpZiAoaW5zZXJ0KSB7XG4gICAgICB0b2tlbnMudW5zaGlmdChpbnNlcnQpO1xuICAgIH1cblxuICAgIGlmIChmdW5jTmFtZSA9PT0gXCJcXFxcZWRlZlwiIHx8IGZ1bmNOYW1lID09PSBcIlxcXFx4ZGVmXCIpIHtcbiAgICAgIHRva2VucyA9IHBhcnNlci5ndWxsZXQuZXhwYW5kVG9rZW5zKHRva2Vucyk7XG4gICAgICB0b2tlbnMucmV2ZXJzZSgpOyAvLyB0byBmaXQgaW4gd2l0aCBzdGFjayBvcmRlclxuICAgIH0gLy8gRmluYWwgYXJnIGlzIHRoZSBleHBhbnNpb24gb2YgdGhlIG1hY3JvXG5cblxuICAgIHBhcnNlci5ndWxsZXQubWFjcm9zLnNldChuYW1lLCB7XG4gICAgICB0b2tlbnMsXG4gICAgICBudW1BcmdzLFxuICAgICAgZGVsaW1pdGVyc1xuICAgIH0sIGZ1bmNOYW1lID09PSBnbG9iYWxNYXBbZnVuY05hbWVdKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGVcbiAgICB9O1xuICB9XG5cbn0pOyAvLyA8c2ltcGxlIGFzc2lnbm1lbnQ+IC0+IDxsZXQgYXNzaWdubWVudD5cbi8vIDxsZXQgYXNzaWdubWVudD4gLT4gXFxmdXR1cmVsZXQ8Y29udHJvbCBzZXF1ZW5jZT48dG9rZW4+PHRva2VuPlxuLy8gICAgIHwgXFxsZXQ8Y29udHJvbCBzZXF1ZW5jZT48ZXF1YWxzPjxvbmUgb3B0aW9uYWwgc3BhY2U+PHRva2VuPlxuLy8gPGVxdWFscz4gLT4gPG9wdGlvbmFsIHNwYWNlcz58PG9wdGlvbmFsIHNwYWNlcz49XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICBuYW1lczogW1wiXFxcXGxldFwiLCBcIlxcXFxcXFxcZ2xvYmFsbGV0XCIgLy8gY2Fu4oCZdCBiZSBlbnRlcmVkIGRpcmVjdGx5XG4gIF0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjMpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjM7XG4gICAgdmFyIG5hbWUgPSBjaGVja0NvbnRyb2xTZXF1ZW5jZShwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCkpO1xuICAgIHBhcnNlci5ndWxsZXQuY29uc3VtZVNwYWNlcygpO1xuICAgIHZhciB0b2sgPSBnZXRSSFMocGFyc2VyKTtcbiAgICBsZXRDb21tYW5kKHBhcnNlciwgbmFtZSwgdG9rLCBmdW5jTmFtZSA9PT0gXCJcXFxcXFxcXGdsb2JhbGxldFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGVcbiAgICB9O1xuICB9XG5cbn0pOyAvLyByZWY6IGh0dHBzOi8vd3d3LnR1Zy5vcmcvVFVHYm9hdC90YjA5LTMvdGIyMmJlY2h0b2xzaGVpbS5wZGZcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImludGVybmFsXCIsXG4gIG5hbWVzOiBbXCJcXFxcZnV0dXJlbGV0XCIsIFwiXFxcXFxcXFxnbG9iYWxmdXR1cmVcIiAvLyBjYW7igJl0IGJlIGVudGVyZWQgZGlyZWN0bHlcbiAgXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmNCkge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmNDtcbiAgICB2YXIgbmFtZSA9IGNoZWNrQ29udHJvbFNlcXVlbmNlKHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKSk7XG4gICAgdmFyIG1pZGRsZSA9IHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKTtcbiAgICB2YXIgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuICAgIGxldENvbW1hbmQocGFyc2VyLCBuYW1lLCB0b2ssIGZ1bmNOYW1lID09PSBcIlxcXFxcXFxcZ2xvYmFsZnV0dXJlXCIpO1xuICAgIHBhcnNlci5ndWxsZXQucHVzaFRva2VuKHRvayk7XG4gICAgcGFyc2VyLmd1bGxldC5wdXNoVG9rZW4obWlkZGxlKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGVcbiAgICB9O1xuICB9XG5cbn0pO1xuXG4vKipcbiAqIFRoaXMgZmlsZSBkZWFscyB3aXRoIGNyZWF0aW5nIGRlbGltaXRlcnMgb2YgdmFyaW91cyBzaXplcy4gVGhlIFRlWGJvb2tcbiAqIGRpc2N1c3NlcyB0aGVzZSByb3V0aW5lcyBvbiBwYWdlIDQ0MS00NDIsIGluIHRoZSBcIkFub3RoZXIgc3Vicm91dGluZSBzZXRzIGJveFxuICogeCB0byBhIHNwZWNpZmllZCB2YXJpYWJsZSBkZWxpbWl0ZXJcIiBwYXJhZ3JhcGguXG4gKlxuICogVGhlcmUgYXJlIHRocmVlIG1haW4gcm91dGluZXMgaGVyZS4gYG1ha2VTbWFsbERlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0aGVcbiAqIG5vcm1hbCBmb250LCBidXQgaW4gZWl0aGVyIHRleHQsIHNjcmlwdCwgb3Igc2NyaXB0c2NyaXB0IHN0eWxlLlxuICogYG1ha2VMYXJnZURlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0ZXh0c3R5bGUsIGJ1dCBpbiBvbmUgb2YgdGhlIFNpemUxLFxuICogU2l6ZTIsIFNpemUzLCBvciBTaXplNCBmb250cy4gYG1ha2VTdGFja2VkRGVsaW1gIG1ha2VzIGEgZGVsaW1pdGVyIG91dCBvZlxuICogc21hbGxlciBwaWVjZXMgdGhhdCBhcmUgc3RhY2tlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyB0YWtlIGEgcGFyYW1ldGVyIGBjZW50ZXJgLCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSBkZWxpbWl0ZXJcbiAqIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIGF4aXMuXG4gKlxuICogVGhlbiwgdGhlcmUgYXJlIHRocmVlIGV4cG9zZWQgZnVuY3Rpb25zLiBgc2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgaW5cbiAqIG9uZSBvZiB0aGUgZ2l2ZW4gc2l6ZXMuIFRoaXMgaXMgdXNlZCBmb3IgdGhpbmdzIGxpa2UgYFxcYmlnbGAuXG4gKiBgY3VzdG9tU2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgd2l0aCBhIGdpdmVuIHRvdGFsIGhlaWdodCtkZXB0aC4gSXQgaXNcbiAqIGNhbGxlZCBpbiBwbGFjZXMgbGlrZSBgXFxzcXJ0YC4gYGxlZnRSaWdodERlbGltYCBtYWtlcyBhbiBhcHByb3ByaWF0ZVxuICogZGVsaW1pdGVyIHdoaWNoIHN1cnJvdW5kcyBhbiBleHByZXNzaW9uIG9mIGEgZ2l2ZW4gaGVpZ2h0IGFuIGRlcHRoLiBJdCBpc1xuICogdXNlZCBpbiBgXFxsZWZ0YCBhbmQgYFxccmlnaHRgLlxuICovXG5cbi8qKlxuICogR2V0IHRoZSBtZXRyaWNzIGZvciBhIGdpdmVuIHN5bWJvbCBhbmQgZm9udCwgYWZ0ZXIgdHJhbnNmb3JtYXRpb24gKGkuZS5cbiAqIGFmdGVyIGZvbGxvd2luZyByZXBsYWNlbWVudCBmcm9tIHN5bWJvbHMuanMpXG4gKi9cbnZhciBnZXRNZXRyaWNzID0gZnVuY3Rpb24gZ2V0TWV0cmljcyhzeW1ib2wsIGZvbnQsIG1vZGUpIHtcbiAgdmFyIHJlcGxhY2UgPSBzeW1ib2xzLm1hdGhbc3ltYm9sXSAmJiBzeW1ib2xzLm1hdGhbc3ltYm9sXS5yZXBsYWNlO1xuICB2YXIgbWV0cmljcyA9IGdldENoYXJhY3Rlck1ldHJpY3MocmVwbGFjZSB8fCBzeW1ib2wsIGZvbnQsIG1vZGUpO1xuXG4gIGlmICghbWV0cmljcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN5bWJvbCBcIiArIHN5bWJvbCArIFwiIGFuZCBmb250IHNpemUgXCIgKyBmb250ICsgXCIuXCIpO1xuICB9XG5cbiAgcmV0dXJuIG1ldHJpY3M7XG59O1xuLyoqXG4gKiBQdXRzIGEgZGVsaW1pdGVyIHNwYW4gaW4gYSBnaXZlbiBzdHlsZSwgYW5kIGFkZHMgYXBwcm9wcmlhdGUgaGVpZ2h0LCBkZXB0aCxcbiAqIGFuZCBtYXhGb250U2l6ZXMuXG4gKi9cblxuXG52YXIgc3R5bGVXcmFwID0gZnVuY3Rpb24gc3R5bGVXcmFwKGRlbGltLCB0b1N0eWxlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdCYXNlU3R5bGUodG9TdHlsZSk7XG4gIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oY2xhc3Nlcy5jb25jYXQobmV3T3B0aW9ucy5zaXppbmdDbGFzc2VzKG9wdGlvbnMpKSwgW2RlbGltXSwgb3B0aW9ucyk7XG4gIHZhciBkZWxpbVNpemVNdWx0aXBsaWVyID0gbmV3T3B0aW9ucy5zaXplTXVsdGlwbGllciAvIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIHNwYW4uaGVpZ2h0ICo9IGRlbGltU2l6ZU11bHRpcGxpZXI7XG4gIHNwYW4uZGVwdGggKj0gZGVsaW1TaXplTXVsdGlwbGllcjtcbiAgc3Bhbi5tYXhGb250U2l6ZSA9IG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIHJldHVybiBzcGFuO1xufTtcblxudmFyIGNlbnRlclNwYW4gPSBmdW5jdGlvbiBjZW50ZXJTcGFuKHNwYW4sIG9wdGlvbnMsIHN0eWxlKSB7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdCYXNlU3R5bGUoc3R5bGUpO1xuICB2YXIgc2hpZnQgPSAoMSAtIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyKSAqIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuICBzcGFuLmNsYXNzZXMucHVzaChcImRlbGltY2VudGVyXCIpO1xuICBzcGFuLnN0eWxlLnRvcCA9IG1ha2VFbShzaGlmdCk7XG4gIHNwYW4uaGVpZ2h0IC09IHNoaWZ0O1xuICBzcGFuLmRlcHRoICs9IHNoaWZ0O1xufTtcbi8qKlxuICogTWFrZXMgYSBzbWFsbCBkZWxpbWl0ZXIuIFRoaXMgaXMgYSBkZWxpbWl0ZXIgdGhhdCBjb21lcyBpbiB0aGUgTWFpbi1SZWd1bGFyXG4gKiBmb250LCBidXQgaXMgcmVzdHlsZWQgdG8gZWl0aGVyIGJlIGluIHRleHRzdHlsZSwgc2NyaXB0c3R5bGUsIG9yXG4gKiBzY3JpcHRzY3JpcHRzdHlsZS5cbiAqL1xuXG5cbnZhciBtYWtlU21hbGxEZWxpbSA9IGZ1bmN0aW9uIG1ha2VTbWFsbERlbGltKGRlbGltLCBzdHlsZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIHZhciB0ZXh0ID0gYnVpbGRDb21tb24ubWFrZVN5bWJvbChkZWxpbSwgXCJNYWluLVJlZ3VsYXJcIiwgbW9kZSwgb3B0aW9ucyk7XG4gIHZhciBzcGFuID0gc3R5bGVXcmFwKHRleHQsIHN0eWxlLCBvcHRpb25zLCBjbGFzc2VzKTtcblxuICBpZiAoY2VudGVyKSB7XG4gICAgY2VudGVyU3BhbihzcGFuLCBvcHRpb25zLCBzdHlsZSk7XG4gIH1cblxuICByZXR1cm4gc3Bhbjtcbn07XG4vKipcbiAqIEJ1aWxkcyBhIHN5bWJvbCBpbiB0aGUgZ2l2ZW4gZm9udCBzaXplIChub3RlIHNpemUgaXMgYW4gaW50ZWdlcilcbiAqL1xuXG5cbnZhciBtYXRocm1TaXplID0gZnVuY3Rpb24gbWF0aHJtU2l6ZSh2YWx1ZSwgc2l6ZSwgbW9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN5bWJvbCh2YWx1ZSwgXCJTaXplXCIgKyBzaXplICsgXCItUmVndWxhclwiLCBtb2RlLCBvcHRpb25zKTtcbn07XG4vKipcbiAqIE1ha2VzIGEgbGFyZ2UgZGVsaW1pdGVyLiBUaGlzIGlzIGEgZGVsaW1pdGVyIHRoYXQgY29tZXMgaW4gdGhlIFNpemUxLCBTaXplMixcbiAqIFNpemUzLCBvciBTaXplNCBmb250cy4gSXQgaXMgYWx3YXlzIHJlbmRlcmVkIGluIHRleHRzdHlsZS5cbiAqL1xuXG5cbnZhciBtYWtlTGFyZ2VEZWxpbSA9IGZ1bmN0aW9uIG1ha2VMYXJnZURlbGltKGRlbGltLCBzaXplLCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgdmFyIGlubmVyID0gbWF0aHJtU2l6ZShkZWxpbSwgc2l6ZSwgbW9kZSwgb3B0aW9ucyk7XG4gIHZhciBzcGFuID0gc3R5bGVXcmFwKGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImRlbGltc2l6aW5nXCIsIFwic2l6ZVwiICsgc2l6ZV0sIFtpbm5lcl0sIG9wdGlvbnMpLCBTdHlsZSQxLlRFWFQsIG9wdGlvbnMsIGNsYXNzZXMpO1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBjZW50ZXJTcGFuKHNwYW4sIG9wdGlvbnMsIFN0eWxlJDEuVEVYVCk7XG4gIH1cblxuICByZXR1cm4gc3Bhbjtcbn07XG4vKipcbiAqIE1ha2UgYSBzcGFuIGZyb20gYSBmb250IGdseXBoIHdpdGggdGhlIGdpdmVuIG9mZnNldCBhbmQgaW4gdGhlIGdpdmVuIGZvbnQuXG4gKiBUaGlzIGlzIHVzZWQgaW4gbWFrZVN0YWNrZWREZWxpbSB0byBtYWtlIHRoZSBzdGFja2luZyBwaWVjZXMgZm9yIHRoZSBkZWxpbWl0ZXIuXG4gKi9cblxuXG52YXIgbWFrZUdseXBoU3BhbiA9IGZ1bmN0aW9uIG1ha2VHbHlwaFNwYW4oc3ltYm9sLCBmb250LCBtb2RlKSB7XG4gIHZhciBzaXplQ2xhc3M7IC8vIEFwcGx5IHRoZSBjb3JyZWN0IENTUyBjbGFzcyB0byBjaG9vc2UgdGhlIHJpZ2h0IGZvbnQuXG5cbiAgaWYgKGZvbnQgPT09IFwiU2l6ZTEtUmVndWxhclwiKSB7XG4gICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplMVwiO1xuICB9IGVsc2VcbiAgICAvKiBpZiAoZm9udCA9PT0gXCJTaXplNC1SZWd1bGFyXCIpICovXG4gICAge1xuICAgICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplNFwiO1xuICAgIH1cblxuICB2YXIgY29ybmVyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZGVsaW1zaXppbmdpbm5lclwiLCBzaXplQ2xhc3NdLCBbYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZENvbW1vbi5tYWtlU3ltYm9sKHN5bWJvbCwgZm9udCwgbW9kZSldKV0pOyAvLyBTaW5jZSB0aGlzIHdpbGwgYmUgcGFzc2VkIGludG8gYG1ha2VWTGlzdGAgaW4gdGhlIGVuZCwgd3JhcCB0aGUgZWxlbWVudFxuICAvLyBpbiB0aGUgYXBwcm9wcmlhdGUgdGFnIHRoYXQgVkxpc3QgdXNlcy5cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgIGVsZW06IGNvcm5lclxuICB9O1xufTtcblxudmFyIG1ha2VJbm5lciA9IGZ1bmN0aW9uIG1ha2VJbm5lcihjaCwgaGVpZ2h0LCBvcHRpb25zKSB7XG4gIC8vIENyZWF0ZSBhIHNwYW4gd2l0aCBpbmxpbmUgU1ZHIGZvciB0aGUgaW5uZXIgcGFydCBvZiBhIHRhbGwgc3RhY2tlZCBkZWxpbWl0ZXIuXG4gIHZhciB3aWR0aCA9IGZvbnRNZXRyaWNzRGF0YVsnU2l6ZTQtUmVndWxhciddW2NoLmNoYXJDb2RlQXQoMCldID8gZm9udE1ldHJpY3NEYXRhWydTaXplNC1SZWd1bGFyJ11bY2guY2hhckNvZGVBdCgwKV1bNF0gOiBmb250TWV0cmljc0RhdGFbJ1NpemUxLVJlZ3VsYXInXVtjaC5jaGFyQ29kZUF0KDApXVs0XTtcbiAgdmFyIHBhdGggPSBuZXcgUGF0aE5vZGUoXCJpbm5lclwiLCBpbm5lclBhdGgoY2gsIE1hdGgucm91bmQoMTAwMCAqIGhlaWdodCkpKTtcbiAgdmFyIHN2Z05vZGUgPSBuZXcgU3ZnTm9kZShbcGF0aF0sIHtcbiAgICBcIndpZHRoXCI6IG1ha2VFbSh3aWR0aCksXG4gICAgXCJoZWlnaHRcIjogbWFrZUVtKGhlaWdodCksXG4gICAgLy8gT3ZlcnJpZGUgQ1NTIHJ1bGUgYC5rYXRleCBzdmcgeyB3aWR0aDogMTAwJSB9YFxuICAgIFwic3R5bGVcIjogXCJ3aWR0aDpcIiArIG1ha2VFbSh3aWR0aCksXG4gICAgXCJ2aWV3Qm94XCI6IFwiMCAwIFwiICsgMTAwMCAqIHdpZHRoICsgXCIgXCIgKyBNYXRoLnJvdW5kKDEwMDAgKiBoZWlnaHQpLFxuICAgIFwicHJlc2VydmVBc3BlY3RSYXRpb1wiOiBcInhNaW5ZTWluXCJcbiAgfSk7XG4gIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW10sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShoZWlnaHQpO1xuICBzcGFuLnN0eWxlLndpZHRoID0gbWFrZUVtKHdpZHRoKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImVsZW1cIixcbiAgICBlbGVtOiBzcGFuXG4gIH07XG59OyAvLyBIZWxwZXJzIGZvciBtYWtlU3RhY2tlZERlbGltXG5cblxudmFyIGxhcEluRW1zID0gMC4wMDg7XG52YXIgbGFwID0ge1xuICB0eXBlOiBcImtlcm5cIixcbiAgc2l6ZTogLTEgKiBsYXBJbkVtc1xufTtcbnZhciB2ZXJ0cyA9IFtcInxcIiwgXCJcXFxcbHZlcnRcIiwgXCJcXFxccnZlcnRcIiwgXCJcXFxcdmVydFwiXTtcbnZhciBkb3VibGVWZXJ0cyA9IFtcIlxcXFx8XCIsIFwiXFxcXGxWZXJ0XCIsIFwiXFxcXHJWZXJ0XCIsIFwiXFxcXFZlcnRcIl07XG4vKipcbiAqIE1ha2UgYSBzdGFja2VkIGRlbGltaXRlciBvdXQgb2YgYSBnaXZlbiBkZWxpbWl0ZXIsIHdpdGggdGhlIHRvdGFsIGhlaWdodCBhdFxuICogbGVhc3QgYGhlaWdodFRvdGFsYC4gVGhpcyByb3V0aW5lIGlzIG1lbnRpb25lZCBvbiBwYWdlIDQ0MiBvZiB0aGUgVGVYYm9vay5cbiAqL1xuXG52YXIgbWFrZVN0YWNrZWREZWxpbSA9IGZ1bmN0aW9uIG1ha2VTdGFja2VkRGVsaW0oZGVsaW0sIGhlaWdodFRvdGFsLCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgLy8gVGhlcmUgYXJlIGZvdXIgcGFydHMsIHRoZSB0b3AsIGFuIG9wdGlvbmFsIG1pZGRsZSwgYSByZXBlYXRlZCBwYXJ0LCBhbmQgYVxuICAvLyBib3R0b20uXG4gIHZhciB0b3A7XG4gIHZhciBtaWRkbGU7XG4gIHZhciByZXBlYXQ7XG4gIHZhciBib3R0b207XG4gIHZhciBzdmdMYWJlbCA9IFwiXCI7XG4gIHZhciB2aWV3Qm94V2lkdGggPSAwO1xuICB0b3AgPSByZXBlYXQgPSBib3R0b20gPSBkZWxpbTtcbiAgbWlkZGxlID0gbnVsbDsgLy8gQWxzbyBrZWVwIHRyYWNrIG9mIHdoYXQgZm9udCB0aGUgZGVsaW1pdGVycyBhcmUgaW5cblxuICB2YXIgZm9udCA9IFwiU2l6ZTEtUmVndWxhclwiOyAvLyBXZSBzZXQgdGhlIHBhcnRzIGFuZCBmb250IGJhc2VkIG9uIHRoZSBzeW1ib2wuIE5vdGUgdGhhdCB3ZSB1c2VcbiAgLy8gJ1xcdTIzZDAnIGluc3RlYWQgb2YgJ3wnIGFuZCAnXFx1MjAxNicgaW5zdGVhZCBvZiAnXFxcXHwnIGZvciB0aGVcbiAgLy8gcmVwZWF0cyBvZiB0aGUgYXJyb3dzXG5cbiAgaWYgKGRlbGltID09PSBcIlxcXFx1cGFycm93XCIpIHtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzZDBcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcVXBhcnJvd1wiKSB7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGRvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyM2QwXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXERvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFx1cGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2QwXCI7XG4gICAgYm90dG9tID0gXCJcXFxcZG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXFVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFxVcGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gICAgYm90dG9tID0gXCJcXFxcRG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAodXRpbHMuY29udGFpbnModmVydHMsIGRlbGltKSkge1xuICAgIHJlcGVhdCA9IFwiXFx1MjIyM1wiO1xuICAgIHN2Z0xhYmVsID0gXCJ2ZXJ0XCI7XG4gICAgdmlld0JveFdpZHRoID0gMzMzO1xuICB9IGVsc2UgaWYgKHV0aWxzLmNvbnRhaW5zKGRvdWJsZVZlcnRzLCBkZWxpbSkpIHtcbiAgICByZXBlYXQgPSBcIlxcdTIyMjVcIjtcbiAgICBzdmdMYWJlbCA9IFwiZG91YmxldmVydFwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDU1NjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJbXCIgfHwgZGVsaW0gPT09IFwiXFxcXGxicmFja1wiKSB7XG4gICAgdG9wID0gXCJcXHUyM2ExXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2EyXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2EzXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICAgIHN2Z0xhYmVsID0gXCJsYnJhY2tcIjtcbiAgICB2aWV3Qm94V2lkdGggPSA2Njc7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXVwiIHx8IGRlbGltID09PSBcIlxcXFxyYnJhY2tcIikge1xuICAgIHRvcCA9IFwiXFx1MjNhNFwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNhNVwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNhNlwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgICBzdmdMYWJlbCA9IFwicmJyYWNrXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxsZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBhXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzYTJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTNcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxmbG9vclwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDY2NztcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcbGNlaWxcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzA4XCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTFcIjtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzYTJcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxjZWlsXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxyZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBiXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzYTVcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTZcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcInJmbG9vclwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDY2NztcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxccmNlaWxcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzA5XCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTRcIjtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzYTVcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcInJjZWlsXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIihcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbHBhcmVuXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzOWJcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzOWNcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzOWRcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxwYXJlblwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDg3NTtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCIpXCIgfHwgZGVsaW0gPT09IFwiXFxcXHJwYXJlblwiKSB7XG4gICAgdG9wID0gXCJcXHUyMzllXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyMzlmXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2EwXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICAgIHN2Z0xhYmVsID0gXCJycGFyZW5cIjtcbiAgICB2aWV3Qm94V2lkdGggPSA4NzU7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHtcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbGJyYWNlXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTdcIjtcbiAgICBtaWRkbGUgPSBcIlxcdTIzYThcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTlcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzYWFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXH1cIiB8fCBkZWxpbSA9PT0gXCJcXFxccmJyYWNlXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYWJcIjtcbiAgICBtaWRkbGUgPSBcIlxcdTIzYWNcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYWRcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzYWFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGxncm91cFwiIHx8IGRlbGltID09PSBcIlxcdTI3ZWVcIikge1xuICAgIHRvcCA9IFwiXFx1MjNhN1wiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNhOVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNhYVwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxccmdyb3VwXCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlZlwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2FiXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2FkXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxsbW91c3RhY2hlXCIgfHwgZGVsaW0gPT09IFwiXFx1MjNiMFwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2E3XCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2FkXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxybW91c3RhY2hlXCIgfHwgZGVsaW0gPT09IFwiXFx1MjNiMVwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2FiXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2E5XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IC8vIEdldCB0aGUgbWV0cmljcyBvZiB0aGUgZm91ciBzZWN0aW9uc1xuXG5cbiAgdmFyIHRvcE1ldHJpY3MgPSBnZXRNZXRyaWNzKHRvcCwgZm9udCwgbW9kZSk7XG4gIHZhciB0b3BIZWlnaHRUb3RhbCA9IHRvcE1ldHJpY3MuaGVpZ2h0ICsgdG9wTWV0cmljcy5kZXB0aDtcbiAgdmFyIHJlcGVhdE1ldHJpY3MgPSBnZXRNZXRyaWNzKHJlcGVhdCwgZm9udCwgbW9kZSk7XG4gIHZhciByZXBlYXRIZWlnaHRUb3RhbCA9IHJlcGVhdE1ldHJpY3MuaGVpZ2h0ICsgcmVwZWF0TWV0cmljcy5kZXB0aDtcbiAgdmFyIGJvdHRvbU1ldHJpY3MgPSBnZXRNZXRyaWNzKGJvdHRvbSwgZm9udCwgbW9kZSk7XG4gIHZhciBib3R0b21IZWlnaHRUb3RhbCA9IGJvdHRvbU1ldHJpY3MuaGVpZ2h0ICsgYm90dG9tTWV0cmljcy5kZXB0aDtcbiAgdmFyIG1pZGRsZUhlaWdodFRvdGFsID0gMDtcbiAgdmFyIG1pZGRsZUZhY3RvciA9IDE7XG5cbiAgaWYgKG1pZGRsZSAhPT0gbnVsbCkge1xuICAgIHZhciBtaWRkbGVNZXRyaWNzID0gZ2V0TWV0cmljcyhtaWRkbGUsIGZvbnQsIG1vZGUpO1xuICAgIG1pZGRsZUhlaWdodFRvdGFsID0gbWlkZGxlTWV0cmljcy5oZWlnaHQgKyBtaWRkbGVNZXRyaWNzLmRlcHRoO1xuICAgIG1pZGRsZUZhY3RvciA9IDI7IC8vIHJlcGVhdCBzeW1tZXRyaWNhbGx5IGFib3ZlIGFuZCBiZWxvdyBtaWRkbGVcbiAgfSAvLyBDYWxjdWxhdGUgdGhlIG1pbmltYWwgaGVpZ2h0IHRoYXQgdGhlIGRlbGltaXRlciBjYW4gaGF2ZS5cbiAgLy8gSXQgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIHRvcCwgYm90dG9tLCBhbmQgb3B0aW9uYWwgbWlkZGxlIGNvbWJpbmVkLlxuXG5cbiAgdmFyIG1pbkhlaWdodCA9IHRvcEhlaWdodFRvdGFsICsgYm90dG9tSGVpZ2h0VG90YWwgKyBtaWRkbGVIZWlnaHRUb3RhbDsgLy8gQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiB0aGUgcmVwZWF0IHN5bWJvbCB3ZSB3aWxsIG5lZWRcblxuICB2YXIgcmVwZWF0Q291bnQgPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoKGhlaWdodFRvdGFsIC0gbWluSGVpZ2h0KSAvIChtaWRkbGVGYWN0b3IgKiByZXBlYXRIZWlnaHRUb3RhbCkpKTsgLy8gQ29tcHV0ZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBkZWxpbWl0ZXIgaW5jbHVkaW5nIGFsbCB0aGUgc3ltYm9sc1xuXG4gIHZhciByZWFsSGVpZ2h0VG90YWwgPSBtaW5IZWlnaHQgKyByZXBlYXRDb3VudCAqIG1pZGRsZUZhY3RvciAqIHJlcGVhdEhlaWdodFRvdGFsOyAvLyBUaGUgY2VudGVyIG9mIHRoZSBkZWxpbWl0ZXIgaXMgcGxhY2VkIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGF4aXMuIE5vdGVcbiAgLy8gdGhhdCBpbiB0aGlzIGNvbnRleHQsIFwiY2VudGVyXCIgbWVhbnMgdGhhdCB0aGUgZGVsaW1pdGVyIHNob3VsZCBiZVxuICAvLyBjZW50ZXJlZCBhcm91bmQgdGhlIGF4aXMgaW4gdGhlIGN1cnJlbnQgc3R5bGUsIHdoaWxlIG5vcm1hbGx5IGl0IGlzXG4gIC8vIGNlbnRlcmVkIGFyb3VuZCB0aGUgYXhpcyBpbiB0ZXh0c3R5bGUuXG5cbiAgdmFyIGF4aXNIZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDtcblxuICBpZiAoY2VudGVyKSB7XG4gICAgYXhpc0hlaWdodCAqPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICB9IC8vIENhbGN1bGF0ZSB0aGUgZGVwdGhcblxuXG4gIHZhciBkZXB0aCA9IHJlYWxIZWlnaHRUb3RhbCAvIDIgLSBheGlzSGVpZ2h0OyAvLyBOb3csIHdlIHN0YXJ0IGJ1aWxkaW5nIHRoZSBwaWVjZXMgdGhhdCB3aWxsIGdvIGludG8gdGhlIHZsaXN0XG4gIC8vIEtlZXAgYSBsaXN0IG9mIHRoZSBwaWVjZXMgb2YgdGhlIHN0YWNrZWQgZGVsaW1pdGVyXG5cbiAgdmFyIHN0YWNrID0gW107XG5cbiAgaWYgKHN2Z0xhYmVsLmxlbmd0aCA+IDApIHtcbiAgICAvLyBJbnN0ZWFkIG9mIHN0YWNraW5nIGdseXBocywgY3JlYXRlIGEgc2luZ2xlIFNWRy5cbiAgICAvLyBUaGlzIGV2YWRlcyBicm93c2VyIHByb2JsZW1zIHdpdGggaW1wcmVjaXNlIHBvc2l0aW9uaW5nIG9mIHNwYW5zLlxuICAgIHZhciBtaWRIZWlnaHQgPSByZWFsSGVpZ2h0VG90YWwgLSB0b3BIZWlnaHRUb3RhbCAtIGJvdHRvbUhlaWdodFRvdGFsO1xuICAgIHZhciB2aWV3Qm94SGVpZ2h0ID0gTWF0aC5yb3VuZChyZWFsSGVpZ2h0VG90YWwgKiAxMDAwKTtcbiAgICB2YXIgcGF0aFN0ciA9IHRhbGxEZWxpbShzdmdMYWJlbCwgTWF0aC5yb3VuZChtaWRIZWlnaHQgKiAxMDAwKSk7XG4gICAgdmFyIHBhdGggPSBuZXcgUGF0aE5vZGUoc3ZnTGFiZWwsIHBhdGhTdHIpO1xuICAgIHZhciB3aWR0aCA9ICh2aWV3Qm94V2lkdGggLyAxMDAwKS50b0ZpeGVkKDMpICsgXCJlbVwiO1xuICAgIHZhciBoZWlnaHQgPSAodmlld0JveEhlaWdodCAvIDEwMDApLnRvRml4ZWQoMykgKyBcImVtXCI7XG4gICAgdmFyIHN2ZyA9IG5ldyBTdmdOb2RlKFtwYXRoXSwge1xuICAgICAgXCJ3aWR0aFwiOiB3aWR0aCxcbiAgICAgIFwiaGVpZ2h0XCI6IGhlaWdodCxcbiAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgdmlld0JveEhlaWdodFxuICAgIH0pO1xuICAgIHZhciB3cmFwcGVyID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW10sIFtzdmddLCBvcHRpb25zKTtcbiAgICB3cmFwcGVyLmhlaWdodCA9IHZpZXdCb3hIZWlnaHQgLyAxMDAwO1xuICAgIHdyYXBwZXIuc3R5bGUud2lkdGggPSB3aWR0aDtcbiAgICB3cmFwcGVyLnN0eWxlLmhlaWdodCA9IGhlaWdodDtcbiAgICBzdGFjay5wdXNoKHtcbiAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgZWxlbTogd3JhcHBlclxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIFN0YWNrIGdseXBoc1xuICAgIC8vIFN0YXJ0IGJ5IGFkZGluZyB0aGUgYm90dG9tIHN5bWJvbFxuICAgIHN0YWNrLnB1c2gobWFrZUdseXBoU3Bhbihib3R0b20sIGZvbnQsIG1vZGUpKTtcbiAgICBzdGFjay5wdXNoKGxhcCk7IC8vIG92ZXJsYXBcblxuICAgIGlmIChtaWRkbGUgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZSBtaWRkbGUgc2VjdGlvbiB3aWxsIGJlIGFuIFNWRy4gTWFrZSBpdCBhbiBleHRyYSAwLjAxNmVtIHRhbGwuXG4gICAgICAvLyBXZSdsbCBvdmVybGFwIGJ5IDAuMDA4ZW0gYXQgdG9wIGFuZCBib3R0b20uXG4gICAgICB2YXIgaW5uZXJIZWlnaHQgPSByZWFsSGVpZ2h0VG90YWwgLSB0b3BIZWlnaHRUb3RhbCAtIGJvdHRvbUhlaWdodFRvdGFsICsgMiAqIGxhcEluRW1zO1xuICAgICAgc3RhY2sucHVzaChtYWtlSW5uZXIocmVwZWF0LCBpbm5lckhlaWdodCwgb3B0aW9ucykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXaGVuIHRoZXJlIGlzIGEgbWlkZGxlIGJpdCwgd2UgbmVlZCB0aGUgbWlkZGxlIHBhcnQgYW5kIHR3byByZXBlYXRlZFxuICAgICAgLy8gc2VjdGlvbnNcbiAgICAgIHZhciBfaW5uZXJIZWlnaHQgPSAocmVhbEhlaWdodFRvdGFsIC0gdG9wSGVpZ2h0VG90YWwgLSBib3R0b21IZWlnaHRUb3RhbCAtIG1pZGRsZUhlaWdodFRvdGFsKSAvIDIgKyAyICogbGFwSW5FbXM7XG5cbiAgICAgIHN0YWNrLnB1c2gobWFrZUlubmVyKHJlcGVhdCwgX2lubmVySGVpZ2h0LCBvcHRpb25zKSk7IC8vIE5vdyBpbnNlcnQgdGhlIG1pZGRsZSBvZiB0aGUgYnJhY2UuXG5cbiAgICAgIHN0YWNrLnB1c2gobGFwKTtcbiAgICAgIHN0YWNrLnB1c2gobWFrZUdseXBoU3BhbihtaWRkbGUsIGZvbnQsIG1vZGUpKTtcbiAgICAgIHN0YWNrLnB1c2gobGFwKTtcbiAgICAgIHN0YWNrLnB1c2gobWFrZUlubmVyKHJlcGVhdCwgX2lubmVySGVpZ2h0LCBvcHRpb25zKSk7XG4gICAgfSAvLyBBZGQgdGhlIHRvcCBzeW1ib2xcblxuXG4gICAgc3RhY2sucHVzaChsYXApO1xuICAgIHN0YWNrLnB1c2gobWFrZUdseXBoU3Bhbih0b3AsIGZvbnQsIG1vZGUpKTtcbiAgfSAvLyBGaW5hbGx5LCBidWlsZCB0aGUgdmxpc3RcblxuXG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdCYXNlU3R5bGUoU3R5bGUkMS5URVhUKTtcbiAgdmFyIGlubmVyID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgcG9zaXRpb25EYXRhOiBkZXB0aCxcbiAgICBjaGlsZHJlbjogc3RhY2tcbiAgfSwgbmV3T3B0aW9ucyk7XG4gIHJldHVybiBzdHlsZVdyYXAoYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZGVsaW1zaXppbmdcIiwgXCJtdWx0XCJdLCBbaW5uZXJdLCBuZXdPcHRpb25zKSwgU3R5bGUkMS5URVhULCBvcHRpb25zLCBjbGFzc2VzKTtcbn07IC8vIEFsbCBzdXJkcyBoYXZlIDAuMDhlbSBwYWRkaW5nIGFib3ZlIHRoZSB2aW5jdWx1bSBpbnNpZGUgdGhlIFNWRy5cbi8vIFRoYXQga2VlcHMgYnJvd3NlciBzcGFuIGhlaWdodCByb3VuZGluZyBlcnJvciBmcm9tIHBpbmNoaW5nIHRoZSBsaW5lLlxuXG5cbnZhciB2YlBhZCA9IDgwOyAvLyBwYWRkaW5nIGFib3ZlIHRoZSBzdXJkLCBtZWFzdXJlZCBpbnNpZGUgdGhlIHZpZXdCb3guXG5cbnZhciBlbVBhZCA9IDAuMDg7IC8vIHBhZGRpbmcsIGluIGVtcywgbWVhc3VyZWQgaW4gdGhlIGRvY3VtZW50LlxuXG52YXIgc3FydFN2ZyA9IGZ1bmN0aW9uIHNxcnRTdmcoc3FydE5hbWUsIGhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5jdWx1bSwgb3B0aW9ucykge1xuICB2YXIgcGF0aCA9IHNxcnRQYXRoKHNxcnROYW1lLCBleHRyYVZpbmN1bHVtLCB2aWV3Qm94SGVpZ2h0KTtcbiAgdmFyIHBhdGhOb2RlID0gbmV3IFBhdGhOb2RlKHNxcnROYW1lLCBwYXRoKTtcbiAgdmFyIHN2ZyA9IG5ldyBTdmdOb2RlKFtwYXRoTm9kZV0sIHtcbiAgICAvLyBOb3RlOiAxMDAwOjEgcmF0aW8gb2Ygdmlld0JveCB0byBkb2N1bWVudCBlbSB3aWR0aC5cbiAgICBcIndpZHRoXCI6IFwiNDAwZW1cIixcbiAgICBcImhlaWdodFwiOiBtYWtlRW0oaGVpZ2h0KSxcbiAgICBcInZpZXdCb3hcIjogXCIwIDAgNDAwMDAwIFwiICsgdmlld0JveEhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pbiBzbGljZVwiXG4gIH0pO1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW1wiaGlkZS10YWlsXCJdLCBbc3ZnXSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiBNYWtlIGEgc3FydCBpbWFnZSBvZiB0aGUgZ2l2ZW4gaGVpZ2h0LFxuICovXG5cblxudmFyIG1ha2VTcXJ0SW1hZ2UgPSBmdW5jdGlvbiBtYWtlU3FydEltYWdlKGhlaWdodCwgb3B0aW9ucykge1xuICAvLyBEZWZpbmUgYSBuZXdPcHRpb25zIHRoYXQgcmVtb3ZlcyB0aGUgZWZmZWN0IG9mIHNpemUgY2hhbmdlcyBzdWNoIGFzIFxcSHVnZS5cbiAgLy8gV2UgZG9uJ3QgcGljayBkaWZmZXJlbnQgYSBoZWlnaHQgc3VyZCBmb3IgXFxIdWdlLiBGb3IgaXQsIHdlIHNjYWxlIHVwLlxuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVNpemluZygpOyAvLyBQaWNrIHRoZSBkZXNpcmVkIHN1cmQgZ2x5cGggZnJvbSBhIHNlcXVlbmNlIG9mIHN1cmRzLlxuXG4gIHZhciBkZWxpbSA9IHRyYXZlcnNlU2VxdWVuY2UoXCJcXFxcc3VyZFwiLCBoZWlnaHQgKiBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyLCBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UsIG5ld09wdGlvbnMpO1xuICB2YXIgc2l6ZU11bHRpcGxpZXIgPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyOyAvLyBkZWZhdWx0XG4gIC8vIFRoZSBzdGFuZGFyZCBzcXJ0IFNWR3MgZWFjaCBoYXZlIGEgMC4wNGVtIHRoaWNrIHZpbmN1bHVtLlxuICAvLyBJZiBTZXR0aW5ncy5taW5SdWxlVGhpY2tuZXNzIGlzIGxhcmdlciB0aGFuIHRoYXQsIHdlIGFkZCBleHRyYVZpbmN1bHVtLlxuXG4gIHZhciBleHRyYVZpbmN1bHVtID0gTWF0aC5tYXgoMCwgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC0gb3B0aW9ucy5mb250TWV0cmljcygpLnNxcnRSdWxlVGhpY2tuZXNzKTsgLy8gQ3JlYXRlIGEgc3BhbiBjb250YWluaW5nIGFuIFNWRyBpbWFnZSBvZiBhIHNxcnQgc3ltYm9sLlxuXG4gIHZhciBzcGFuO1xuICB2YXIgc3BhbkhlaWdodCA9IDA7XG4gIHZhciB0ZXhIZWlnaHQgPSAwO1xuICB2YXIgdmlld0JveEhlaWdodCA9IDA7XG4gIHZhciBhZHZhbmNlV2lkdGg7IC8vIFdlIGNyZWF0ZSB2aWV3Qm94ZXMgd2l0aCA4MCB1bml0cyBvZiBcInBhZGRpbmdcIiBhYm92ZSBlYWNoIHN1cmQuXG4gIC8vIFRoZW4gYnJvd3NlciByb3VuZGluZyBlcnJvciBvbiB0aGUgcGFyZW50IHNwYW4gaGVpZ2h0IHdpbGwgbm90XG4gIC8vIGVuY3JvYWNoIG9uIHRoZSBpbmsgb2YgdGhlIHZpbmN1bHVtLiBCdXQgdGhhdCBwYWRkaW5nIGlzIG5vdFxuICAvLyBpbmNsdWRlZCBpbiB0aGUgVGVYLWxpa2UgYGhlaWdodGAgdXNlZCBmb3IgY2FsY3VsYXRpb24gb2ZcbiAgLy8gdmVydGljYWwgYWxpZ25tZW50LiBTbyB0ZXhIZWlnaHQgPSBzcGFuLmhlaWdodCA8IHNwYW4uc3R5bGUuaGVpZ2h0LlxuXG4gIGlmIChkZWxpbS50eXBlID09PSBcInNtYWxsXCIpIHtcbiAgICAvLyBHZXQgYW4gU1ZHIHRoYXQgaXMgZGVyaXZlZCBmcm9tIGdseXBoIFUrMjIxQSBpbiBmb250IEthVGVYLU1haW4uXG4gICAgLy8gMTAwMCB1bml0IG5vcm1hbCBnbHlwaCBoZWlnaHQuXG4gICAgdmlld0JveEhlaWdodCA9IDEwMDAgKyAxMDAwICogZXh0cmFWaW5jdWx1bSArIHZiUGFkO1xuXG4gICAgaWYgKGhlaWdodCA8IDEuMCkge1xuICAgICAgc2l6ZU11bHRpcGxpZXIgPSAxLjA7IC8vIG1pbWljIGEgXFx0ZXh0Zm9udCByYWRpY2FsXG4gICAgfSBlbHNlIGlmIChoZWlnaHQgPCAxLjQpIHtcbiAgICAgIHNpemVNdWx0aXBsaWVyID0gMC43OyAvLyBtaW1pYyBhIFxcc2NyaXB0Zm9udCByYWRpY2FsXG4gICAgfVxuXG4gICAgc3BhbkhlaWdodCA9ICgxLjAgKyBleHRyYVZpbmN1bHVtICsgZW1QYWQpIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgdGV4SGVpZ2h0ID0gKDEuMDAgKyBleHRyYVZpbmN1bHVtKSAvIHNpemVNdWx0aXBsaWVyO1xuICAgIHNwYW4gPSBzcXJ0U3ZnKFwic3FydE1haW5cIiwgc3BhbkhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5jdWx1bSwgb3B0aW9ucyk7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IFwiMC44NTNlbVwiO1xuICAgIGFkdmFuY2VXaWR0aCA9IDAuODMzIC8gc2l6ZU11bHRpcGxpZXI7IC8vIGZyb20gdGhlIGZvbnQuXG4gIH0gZWxzZSBpZiAoZGVsaW0udHlwZSA9PT0gXCJsYXJnZVwiKSB7XG4gICAgLy8gVGhlc2UgU1ZHcyBjb21lIGZyb20gZm9udHM6IEthVGVYX1NpemUxLCBfU2l6ZTIsIGV0Yy5cbiAgICB2aWV3Qm94SGVpZ2h0ID0gKDEwMDAgKyB2YlBhZCkgKiBzaXplVG9NYXhIZWlnaHRbZGVsaW0uc2l6ZV07XG4gICAgdGV4SGVpZ2h0ID0gKHNpemVUb01heEhlaWdodFtkZWxpbS5zaXplXSArIGV4dHJhVmluY3VsdW0pIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgc3BhbkhlaWdodCA9IChzaXplVG9NYXhIZWlnaHRbZGVsaW0uc2l6ZV0gKyBleHRyYVZpbmN1bHVtICsgZW1QYWQpIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgc3BhbiA9IHNxcnRTdmcoXCJzcXJ0U2l6ZVwiICsgZGVsaW0uc2l6ZSwgc3BhbkhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5jdWx1bSwgb3B0aW9ucyk7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IFwiMS4wMmVtXCI7XG4gICAgYWR2YW5jZVdpZHRoID0gMS4wIC8gc2l6ZU11bHRpcGxpZXI7IC8vIDEuMCBmcm9tIHRoZSBmb250LlxuICB9IGVsc2Uge1xuICAgIC8vIFRhbGwgc3FydC4gSW4gVGVYLCB0aGlzIHdvdWxkIGJlIHN0YWNrZWQgdXNpbmcgbXVsdGlwbGUgZ2x5cGhzLlxuICAgIC8vIFdlJ2xsIHVzZSBhIHNpbmdsZSBTVkcgdG8gYWNjb21wbGlzaCB0aGUgc2FtZSB0aGluZy5cbiAgICBzcGFuSGVpZ2h0ID0gaGVpZ2h0ICsgZXh0cmFWaW5jdWx1bSArIGVtUGFkO1xuICAgIHRleEhlaWdodCA9IGhlaWdodCArIGV4dHJhVmluY3VsdW07XG4gICAgdmlld0JveEhlaWdodCA9IE1hdGguZmxvb3IoMTAwMCAqIGhlaWdodCArIGV4dHJhVmluY3VsdW0pICsgdmJQYWQ7XG4gICAgc3BhbiA9IHNxcnRTdmcoXCJzcXJ0VGFsbFwiLCBzcGFuSGVpZ2h0LCB2aWV3Qm94SGVpZ2h0LCBleHRyYVZpbmN1bHVtLCBvcHRpb25zKTtcbiAgICBzcGFuLnN0eWxlLm1pbldpZHRoID0gXCIwLjc0MmVtXCI7XG4gICAgYWR2YW5jZVdpZHRoID0gMS4wNTY7XG4gIH1cblxuICBzcGFuLmhlaWdodCA9IHRleEhlaWdodDtcbiAgc3Bhbi5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oc3BhbkhlaWdodCk7XG4gIHJldHVybiB7XG4gICAgc3BhbixcbiAgICBhZHZhbmNlV2lkdGgsXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbGluZSB3aWR0aC5cbiAgICAvLyBUaGlzIGFjdHVhbGx5IHNob3VsZCBkZXBlbmQgb24gdGhlIGNob3NlbiBmb250IC0tIGUuZy4gXFxib2xkbWF0aFxuICAgIC8vIHNob3VsZCB1c2UgdGhlIHRoaWNrZXIgc3VyZCBzeW1ib2xzIGZyb20gZS5nLiBLYVRlWF9NYWluLUJvbGQsIGFuZFxuICAgIC8vIGhhdmUgdGhpY2tlciBydWxlcy5cbiAgICBydWxlV2lkdGg6IChvcHRpb25zLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MgKyBleHRyYVZpbmN1bHVtKSAqIHNpemVNdWx0aXBsaWVyXG4gIH07XG59OyAvLyBUaGVyZSBhcmUgdGhyZWUga2luZHMgb2YgZGVsaW1pdGVycywgZGVsaW1pdGVycyB0aGF0IHN0YWNrIHdoZW4gdGhleSBiZWNvbWVcbi8vIHRvbyBsYXJnZVxuXG5cbnZhciBzdGFja0xhcmdlRGVsaW1pdGVycyA9IFtcIihcIiwgXCJcXFxcbHBhcmVuXCIsIFwiKVwiLCBcIlxcXFxycGFyZW5cIiwgXCJbXCIsIFwiXFxcXGxicmFja1wiLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIsIFwiXFxcXHtcIiwgXCJcXFxcbGJyYWNlXCIsIFwiXFxcXH1cIiwgXCJcXFxccmJyYWNlXCIsIFwiXFxcXGxmbG9vclwiLCBcIlxcXFxyZmxvb3JcIiwgXCJcXHUyMzBhXCIsIFwiXFx1MjMwYlwiLCBcIlxcXFxsY2VpbFwiLCBcIlxcXFxyY2VpbFwiLCBcIlxcdTIzMDhcIiwgXCJcXHUyMzA5XCIsIFwiXFxcXHN1cmRcIl07IC8vIGRlbGltaXRlcnMgdGhhdCBhbHdheXMgc3RhY2tcblxudmFyIHN0YWNrQWx3YXlzRGVsaW1pdGVycyA9IFtcIlxcXFx1cGFycm93XCIsIFwiXFxcXGRvd25hcnJvd1wiLCBcIlxcXFx1cGRvd25hcnJvd1wiLCBcIlxcXFxVcGFycm93XCIsIFwiXFxcXERvd25hcnJvd1wiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCBcInxcIiwgXCJcXFxcfFwiLCBcIlxcXFx2ZXJ0XCIsIFwiXFxcXFZlcnRcIiwgXCJcXFxcbHZlcnRcIiwgXCJcXFxccnZlcnRcIiwgXCJcXFxcbFZlcnRcIiwgXCJcXFxcclZlcnRcIiwgXCJcXFxcbGdyb3VwXCIsIFwiXFxcXHJncm91cFwiLCBcIlxcdTI3ZWVcIiwgXCJcXHUyN2VmXCIsIFwiXFxcXGxtb3VzdGFjaGVcIiwgXCJcXFxccm1vdXN0YWNoZVwiLCBcIlxcdTIzYjBcIiwgXCJcXHUyM2IxXCJdOyAvLyBhbmQgZGVsaW1pdGVycyB0aGF0IG5ldmVyIHN0YWNrXG5cbnZhciBzdGFja05ldmVyRGVsaW1pdGVycyA9IFtcIjxcIiwgXCI+XCIsIFwiXFxcXGxhbmdsZVwiLCBcIlxcXFxyYW5nbGVcIiwgXCIvXCIsIFwiXFxcXGJhY2tzbGFzaFwiLCBcIlxcXFxsdFwiLCBcIlxcXFxndFwiXTsgLy8gTWV0cmljcyBvZiB0aGUgZGlmZmVyZW50IHNpemVzLiBGb3VuZCBieSBsb29raW5nIGF0IFRlWCdzIG91dHB1dCBvZlxuLy8gJFxcYmlnbHwgLy8gXFxCaWdsfCBcXGJpZ2dsfCBcXEJpZ2dsfCBcXHNob3dsaXN0cyRcbi8vIFVzZWQgdG8gY3JlYXRlIHN0YWNrZWQgZGVsaW1pdGVycyBvZiBhcHByb3ByaWF0ZSBzaXplcyBpbiBtYWtlU2l6ZWREZWxpbS5cblxudmFyIHNpemVUb01heEhlaWdodCA9IFswLCAxLjIsIDEuOCwgMi40LCAzLjBdO1xuLyoqXG4gKiBVc2VkIHRvIGNyZWF0ZSBhIGRlbGltaXRlciBvZiBhIHNwZWNpZmljIHNpemUsIHdoZXJlIGBzaXplYCBpcyAxLCAyLCAzLCBvciA0LlxuICovXG5cbnZhciBtYWtlU2l6ZWREZWxpbSA9IGZ1bmN0aW9uIG1ha2VTaXplZERlbGltKGRlbGltLCBzaXplLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIC8vIDwgYW5kID4gdHVybiBpbnRvIFxcbGFuZ2xlIGFuZCBcXHJhbmdsZSBpbiBkZWxpbWl0ZXJzXG4gIGlmIChkZWxpbSA9PT0gXCI8XCIgfHwgZGVsaW0gPT09IFwiXFxcXGx0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOFwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxsYW5nbGVcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCI+XCIgfHwgZGVsaW0gPT09IFwiXFxcXGd0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOVwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxyYW5nbGVcIjtcbiAgfSAvLyBTaXplZCBkZWxpbWl0ZXJzIGFyZSBuZXZlciBjZW50ZXJlZC5cblxuXG4gIGlmICh1dGlscy5jb250YWlucyhzdGFja0xhcmdlRGVsaW1pdGVycywgZGVsaW0pIHx8IHV0aWxzLmNvbnRhaW5zKHN0YWNrTmV2ZXJEZWxpbWl0ZXJzLCBkZWxpbSkpIHtcbiAgICByZXR1cm4gbWFrZUxhcmdlRGVsaW0oZGVsaW0sIHNpemUsIGZhbHNlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIGlmICh1dGlscy5jb250YWlucyhzdGFja0Fsd2F5c0RlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHJldHVybiBtYWtlU3RhY2tlZERlbGltKGRlbGltLCBzaXplVG9NYXhIZWlnaHRbc2l6ZV0sIGZhbHNlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIklsbGVnYWwgZGVsaW1pdGVyOiAnXCIgKyBkZWxpbSArIFwiJ1wiKTtcbiAgfVxufTtcbi8qKlxuICogVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCBzZXF1ZW5jZXMgb2YgZGVsaW1pdGVyIHNpemVzIHRoYXQgdGhlIGRlbGltaXRlcnNcbiAqIGZvbGxvdyBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YgZGVsaW1pdGVyLiBUaGlzIGlzIHVzZWQgd2hlbiBjcmVhdGluZyBjdXN0b21cbiAqIHNpemVkIGRlbGltaXRlcnMgdG8gZGVjaWRlIHdoZXRoZXIgdG8gY3JlYXRlIGEgc21hbGwsIGxhcmdlLCBvciBzdGFja2VkXG4gKiBkZWxpbWl0ZXIuXG4gKlxuICogSW4gcmVhbCBUZVgsIHRoZXNlIHNlcXVlbmNlcyBhcmVuJ3QgZXhwbGljaXRseSBkZWZpbmVkLCBidXQgYXJlIGluc3RlYWRcbiAqIGRlZmluZWQgaW5zaWRlIHRoZSBmb250IG1ldHJpY3MuIFNpbmNlIHRoZXJlIGFyZSBvbmx5IHRocmVlIHNlcXVlbmNlcyB0aGF0XG4gKiBhcmUgcG9zc2libGUgZm9yIHRoZSBkZWxpbWl0ZXJzIHRoYXQgVGVYIGRlZmluZXMsIGl0IGlzIGVhc2llciB0byBqdXN0IGVuY29kZVxuICogdGhlbSBleHBsaWNpdGx5IGhlcmUuXG4gKi9cblxuXG4vLyBEZWxpbWl0ZXJzIHRoYXQgbmV2ZXIgc3RhY2sgdHJ5IHNtYWxsIGRlbGltaXRlcnMgYW5kIGxhcmdlIGRlbGltaXRlcnMgb25seVxudmFyIHN0YWNrTmV2ZXJEZWxpbWl0ZXJTZXF1ZW5jZSA9IFt7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuVEVYVFxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDFcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAyXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogM1xufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDRcbn1dOyAvLyBEZWxpbWl0ZXJzIHRoYXQgYWx3YXlzIHN0YWNrIHRyeSB0aGUgc21hbGwgZGVsaW1pdGVycyBmaXJzdCwgdGhlbiBzdGFja1xuXG52YXIgc3RhY2tBbHdheXNEZWxpbWl0ZXJTZXF1ZW5jZSA9IFt7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuVEVYVFxufSwge1xuICB0eXBlOiBcInN0YWNrXCJcbn1dOyAvLyBEZWxpbWl0ZXJzIHRoYXQgc3RhY2sgd2hlbiBsYXJnZSB0cnkgdGhlIHNtYWxsIGFuZCB0aGVuIGxhcmdlIGRlbGltaXRlcnMsIGFuZFxuLy8gc3RhY2sgYWZ0ZXJ3YXJkc1xuXG52YXIgc3RhY2tMYXJnZURlbGltaXRlclNlcXVlbmNlID0gW3tcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogU3R5bGUkMS5TQ1JJUFRTQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogU3R5bGUkMS5TQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogU3R5bGUkMS5URVhUXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogMVxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDJcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAzXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogNFxufSwge1xuICB0eXBlOiBcInN0YWNrXCJcbn1dO1xuLyoqXG4gKiBHZXQgdGhlIGZvbnQgdXNlZCBpbiBhIGRlbGltaXRlciBiYXNlZCBvbiB3aGF0IGtpbmQgb2YgZGVsaW1pdGVyIGl0IGlzLlxuICogVE9ETygjOTYzKSBVc2UgbW9yZSBzcGVjaWZpYyBmb250IGZhbWlseSByZXR1cm4gdHlwZSBvbmNlIHRoYXQgaXMgaW50cm9kdWNlZC5cbiAqL1xuXG52YXIgZGVsaW1UeXBlVG9Gb250ID0gZnVuY3Rpb24gZGVsaW1UeXBlVG9Gb250KHR5cGUpIHtcbiAgaWYgKHR5cGUudHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgcmV0dXJuIFwiTWFpbi1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAodHlwZS50eXBlID09PSBcImxhcmdlXCIpIHtcbiAgICByZXR1cm4gXCJTaXplXCIgKyB0eXBlLnNpemUgKyBcIi1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAodHlwZS50eXBlID09PSBcInN0YWNrXCIpIHtcbiAgICByZXR1cm4gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWRkIHN1cHBvcnQgZm9yIGRlbGltIHR5cGUgJ1wiICsgdHlwZS50eXBlICsgXCInIGhlcmUuXCIpO1xuICB9XG59O1xuLyoqXG4gKiBUcmF2ZXJzZSBhIHNlcXVlbmNlIG9mIHR5cGVzIG9mIGRlbGltaXRlcnMgdG8gZGVjaWRlIHdoYXQga2luZCBvZiBkZWxpbWl0ZXJcbiAqIHNob3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBhIGRlbGltaXRlciBvZiB0aGUgZ2l2ZW4gaGVpZ2h0K2RlcHRoLlxuICovXG5cblxudmFyIHRyYXZlcnNlU2VxdWVuY2UgPSBmdW5jdGlvbiB0cmF2ZXJzZVNlcXVlbmNlKGRlbGltLCBoZWlnaHQsIHNlcXVlbmNlLCBvcHRpb25zKSB7XG4gIC8vIEhlcmUsIHdlIGNob29zZSB0aGUgaW5kZXggd2Ugc2hvdWxkIHN0YXJ0IGF0IGluIHRoZSBzZXF1ZW5jZXMuIEluIHNtYWxsZXJcbiAgLy8gc2l6ZXMgKHdoaWNoIGNvcnJlc3BvbmQgdG8gbGFyZ2VyIG51bWJlcnMgaW4gc3R5bGUuc2l6ZSkgd2Ugc3RhcnQgZWFybGllclxuICAvLyBpbiB0aGUgc2VxdWVuY2UuIFRodXMsIHNjcmlwdHNjcmlwdCBzdGFydHMgYXQgaW5kZXggMy0zPTAsIHNjcmlwdCBzdGFydHNcbiAgLy8gYXQgaW5kZXggMy0yPTEsIHRleHQgc3RhcnRzIGF0IDMtMT0yLCBhbmQgZGlzcGxheSBzdGFydHMgYXQgbWluKDIsMy0wKT0yXG4gIHZhciBzdGFydCA9IE1hdGgubWluKDIsIDMgLSBvcHRpb25zLnN0eWxlLnNpemUpO1xuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IHNlcXVlbmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHNlcXVlbmNlW2ldLnR5cGUgPT09IFwic3RhY2tcIikge1xuICAgICAgLy8gVGhpcyBpcyBhbHdheXMgdGhlIGxhc3QgZGVsaW1pdGVyLCBzbyB3ZSBqdXN0IGJyZWFrIHRoZSBsb29wIG5vdy5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBtZXRyaWNzID0gZ2V0TWV0cmljcyhkZWxpbSwgZGVsaW1UeXBlVG9Gb250KHNlcXVlbmNlW2ldKSwgXCJtYXRoXCIpO1xuICAgIHZhciBoZWlnaHREZXB0aCA9IG1ldHJpY3MuaGVpZ2h0ICsgbWV0cmljcy5kZXB0aDsgLy8gU21hbGwgZGVsaW1pdGVycyBhcmUgc2NhbGVkIGRvd24gdmVyc2lvbnMgb2YgdGhlIHNhbWUgZm9udCwgc28gd2VcbiAgICAvLyBhY2NvdW50IGZvciB0aGUgc3R5bGUgY2hhbmdlIHNpemUuXG5cbiAgICBpZiAoc2VxdWVuY2VbaV0udHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVN0eWxlKHNlcXVlbmNlW2ldLnN0eWxlKTtcbiAgICAgIGhlaWdodERlcHRoICo9IG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgfSAvLyBDaGVjayBpZiB0aGUgZGVsaW1pdGVyIGF0IHRoaXMgc2l6ZSB3b3JrcyBmb3IgdGhlIGdpdmVuIGhlaWdodC5cblxuXG4gICAgaWYgKGhlaWdodERlcHRoID4gaGVpZ2h0KSB7XG4gICAgICByZXR1cm4gc2VxdWVuY2VbaV07XG4gICAgfVxuICB9IC8vIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UsIHJldHVybiB0aGUgbGFzdCBzZXF1ZW5jZSBlbGVtZW50LlxuXG5cbiAgcmV0dXJuIHNlcXVlbmNlW3NlcXVlbmNlLmxlbmd0aCAtIDFdO1xufTtcbi8qKlxuICogTWFrZSBhIGRlbGltaXRlciBvZiBhIGdpdmVuIGhlaWdodCtkZXB0aCwgd2l0aCBvcHRpb25hbCBjZW50ZXJpbmcuIEhlcmUsIHdlXG4gKiB0cmF2ZXJzZSB0aGUgc2VxdWVuY2VzLCBhbmQgY3JlYXRlIGEgZGVsaW1pdGVyIHRoYXQgdGhlIHNlcXVlbmNlIHRlbGxzIHVzIHRvLlxuICovXG5cblxudmFyIG1ha2VDdXN0b21TaXplZERlbGltID0gZnVuY3Rpb24gbWFrZUN1c3RvbVNpemVkRGVsaW0oZGVsaW0sIGhlaWdodCwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIGlmIChkZWxpbSA9PT0gXCI8XCIgfHwgZGVsaW0gPT09IFwiXFxcXGx0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOFwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxsYW5nbGVcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCI+XCIgfHwgZGVsaW0gPT09IFwiXFxcXGd0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOVwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxyYW5nbGVcIjtcbiAgfSAvLyBEZWNpZGUgd2hhdCBzZXF1ZW5jZSB0byB1c2VcblxuXG4gIHZhciBzZXF1ZW5jZTtcblxuICBpZiAodXRpbHMuY29udGFpbnMoc3RhY2tOZXZlckRlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHNlcXVlbmNlID0gc3RhY2tOZXZlckRlbGltaXRlclNlcXVlbmNlO1xuICB9IGVsc2UgaWYgKHV0aWxzLmNvbnRhaW5zKHN0YWNrTGFyZ2VEZWxpbWl0ZXJzLCBkZWxpbSkpIHtcbiAgICBzZXF1ZW5jZSA9IHN0YWNrTGFyZ2VEZWxpbWl0ZXJTZXF1ZW5jZTtcbiAgfSBlbHNlIHtcbiAgICBzZXF1ZW5jZSA9IHN0YWNrQWx3YXlzRGVsaW1pdGVyU2VxdWVuY2U7XG4gIH0gLy8gTG9vayB0aHJvdWdoIHRoZSBzZXF1ZW5jZVxuXG5cbiAgdmFyIGRlbGltVHlwZSA9IHRyYXZlcnNlU2VxdWVuY2UoZGVsaW0sIGhlaWdodCwgc2VxdWVuY2UsIG9wdGlvbnMpOyAvLyBHZXQgdGhlIGRlbGltaXRlciBmcm9tIGZvbnQgZ2x5cGhzLlxuICAvLyBEZXBlbmRpbmcgb24gdGhlIHNlcXVlbmNlIGVsZW1lbnQgd2UgZGVjaWRlZCBvbiwgY2FsbCB0aGVcbiAgLy8gYXBwcm9wcmlhdGUgZnVuY3Rpb24uXG5cbiAgaWYgKGRlbGltVHlwZS50eXBlID09PSBcInNtYWxsXCIpIHtcbiAgICByZXR1cm4gbWFrZVNtYWxsRGVsaW0oZGVsaW0sIGRlbGltVHlwZS5zdHlsZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIGlmIChkZWxpbVR5cGUudHlwZSA9PT0gXCJsYXJnZVwiKSB7XG4gICAgcmV0dXJuIG1ha2VMYXJnZURlbGltKGRlbGltLCBkZWxpbVR5cGUuc2l6ZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlXG4gICAgLyogaWYgKGRlbGltVHlwZS50eXBlID09PSBcInN0YWNrXCIpICovXG4gICAge1xuICAgICAgcmV0dXJuIG1ha2VTdGFja2VkRGVsaW0oZGVsaW0sIGhlaWdodCwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgICB9XG59O1xuLyoqXG4gKiBNYWtlIGEgZGVsaW1pdGVyIGZvciB1c2Ugd2l0aCBgXFxsZWZ0YCBhbmQgYFxccmlnaHRgLCBnaXZlbiBhIGhlaWdodCBhbmQgZGVwdGhcbiAqIG9mIGFuIGV4cHJlc3Npb24gdGhhdCB0aGUgZGVsaW1pdGVycyBzdXJyb3VuZC5cbiAqL1xuXG5cbnZhciBtYWtlTGVmdFJpZ2h0RGVsaW0gPSBmdW5jdGlvbiBtYWtlTGVmdFJpZ2h0RGVsaW0oZGVsaW0sIGhlaWdodCwgZGVwdGgsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgLy8gV2UgYWx3YXlzIGNlbnRlciBcXGxlZnQvXFxyaWdodCBkZWxpbWl0ZXJzLCBzbyB0aGUgYXhpcyBpcyBhbHdheXMgc2hpZnRlZFxuICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0ICogb3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gVGFrZW4gZnJvbSBUZVggc291cmNlLCB0ZXgud2ViLCBmdW5jdGlvbiBtYWtlX2xlZnRfcmlnaHRcblxuICB2YXIgZGVsaW1pdGVyRmFjdG9yID0gOTAxO1xuICB2YXIgZGVsaW1pdGVyRXh0ZW5kID0gNS4wIC8gb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW07XG4gIHZhciBtYXhEaXN0RnJvbUF4aXMgPSBNYXRoLm1heChoZWlnaHQgLSBheGlzSGVpZ2h0LCBkZXB0aCArIGF4aXNIZWlnaHQpO1xuICB2YXIgdG90YWxIZWlnaHQgPSBNYXRoLm1heCggLy8gSW4gcmVhbCBUZVgsIGNhbGN1bGF0aW9ucyBhcmUgZG9uZSB1c2luZyBpbnRlZ3JhbCB2YWx1ZXMgd2hpY2ggYXJlXG4gIC8vIDY1NTM2IHBlciBwdCwgb3IgNjU1MzYwIHBlciBlbS4gU28sIHRoZSBkaXZpc2lvbiBoZXJlIHRydW5jYXRlcyBpblxuICAvLyBUZVggYnV0IGRvZXNuJ3QgaGVyZSwgcHJvZHVjaW5nIGRpZmZlcmVudCByZXN1bHRzLiBJZiB3ZSB3YW50ZWQgdG9cbiAgLy8gZXhhY3RseSBtYXRjaCBUZVgncyBjYWxjdWxhdGlvbiwgd2UgY291bGQgZG9cbiAgLy8gICBNYXRoLmZsb29yKDY1NTM2MCAqIG1heERpc3RGcm9tQXhpcyAvIDUwMCkgKlxuICAvLyAgICBkZWxpbWl0ZXJGYWN0b3IgLyA2NTUzNjBcbiAgLy8gKFRvIHNlZSB0aGUgZGlmZmVyZW5jZSwgY29tcGFyZVxuICAvLyAgICB4Xnt4XntcXGxlZnQoXFxydWxlezAuMWVtfXswLjY4ZW19XFxyaWdodCl9fVxuICAvLyBpbiBUZVggYW5kIEthVGVYKVxuICBtYXhEaXN0RnJvbUF4aXMgLyA1MDAgKiBkZWxpbWl0ZXJGYWN0b3IsIDIgKiBtYXhEaXN0RnJvbUF4aXMgLSBkZWxpbWl0ZXJFeHRlbmQpOyAvLyBGaW5hbGx5LCB3ZSBkZWZlciB0byBgbWFrZUN1c3RvbVNpemVkRGVsaW1gIHdpdGggb3VyIGNhbGN1bGF0ZWQgdG90YWxcbiAgLy8gaGVpZ2h0XG5cbiAgcmV0dXJuIG1ha2VDdXN0b21TaXplZERlbGltKGRlbGltLCB0b3RhbEhlaWdodCwgdHJ1ZSwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG59O1xuXG52YXIgZGVsaW1pdGVyID0ge1xuICBzcXJ0SW1hZ2U6IG1ha2VTcXJ0SW1hZ2UsXG4gIHNpemVkRGVsaW06IG1ha2VTaXplZERlbGltLFxuICBzaXplVG9NYXhIZWlnaHQ6IHNpemVUb01heEhlaWdodCxcbiAgY3VzdG9tU2l6ZWREZWxpbTogbWFrZUN1c3RvbVNpemVkRGVsaW0sXG4gIGxlZnRSaWdodERlbGltOiBtYWtlTGVmdFJpZ2h0RGVsaW1cbn07XG5cbi8vIEV4dHJhIGRhdGEgbmVlZGVkIGZvciB0aGUgZGVsaW1pdGVyIGhhbmRsZXIgZG93biBiZWxvd1xudmFyIGRlbGltaXRlclNpemVzID0ge1xuICBcIlxcXFxiaWdsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiAxXG4gIH0sXG4gIFwiXFxcXEJpZ2xcIjoge1xuICAgIG1jbGFzczogXCJtb3BlblwiLFxuICAgIHNpemU6IDJcbiAgfSxcbiAgXCJcXFxcYmlnZ2xcIjoge1xuICAgIG1jbGFzczogXCJtb3BlblwiLFxuICAgIHNpemU6IDNcbiAgfSxcbiAgXCJcXFxcQmlnZ2xcIjoge1xuICAgIG1jbGFzczogXCJtb3BlblwiLFxuICAgIHNpemU6IDRcbiAgfSxcbiAgXCJcXFxcYmlnclwiOiB7XG4gICAgbWNsYXNzOiBcIm1jbG9zZVwiLFxuICAgIHNpemU6IDFcbiAgfSxcbiAgXCJcXFxcQmlnclwiOiB7XG4gICAgbWNsYXNzOiBcIm1jbG9zZVwiLFxuICAgIHNpemU6IDJcbiAgfSxcbiAgXCJcXFxcYmlnZ3JcIjoge1xuICAgIG1jbGFzczogXCJtY2xvc2VcIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dyXCI6IHtcbiAgICBtY2xhc3M6IFwibWNsb3NlXCIsXG4gICAgc2l6ZTogNFxuICB9LFxuICBcIlxcXFxiaWdtXCI6IHtcbiAgICBtY2xhc3M6IFwibXJlbFwiLFxuICAgIHNpemU6IDFcbiAgfSxcbiAgXCJcXFxcQmlnbVwiOiB7XG4gICAgbWNsYXNzOiBcIm1yZWxcIixcbiAgICBzaXplOiAyXG4gIH0sXG4gIFwiXFxcXGJpZ2dtXCI6IHtcbiAgICBtY2xhc3M6IFwibXJlbFwiLFxuICAgIHNpemU6IDNcbiAgfSxcbiAgXCJcXFxcQmlnZ21cIjoge1xuICAgIG1jbGFzczogXCJtcmVsXCIsXG4gICAgc2l6ZTogNFxuICB9LFxuICBcIlxcXFxiaWdcIjoge1xuICAgIG1jbGFzczogXCJtb3JkXCIsXG4gICAgc2l6ZTogMVxuICB9LFxuICBcIlxcXFxCaWdcIjoge1xuICAgIG1jbGFzczogXCJtb3JkXCIsXG4gICAgc2l6ZTogMlxuICB9LFxuICBcIlxcXFxiaWdnXCI6IHtcbiAgICBtY2xhc3M6IFwibW9yZFwiLFxuICAgIHNpemU6IDNcbiAgfSxcbiAgXCJcXFxcQmlnZ1wiOiB7XG4gICAgbWNsYXNzOiBcIm1vcmRcIixcbiAgICBzaXplOiA0XG4gIH1cbn07XG52YXIgZGVsaW1pdGVycyA9IFtcIihcIiwgXCJcXFxcbHBhcmVuXCIsIFwiKVwiLCBcIlxcXFxycGFyZW5cIiwgXCJbXCIsIFwiXFxcXGxicmFja1wiLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIsIFwiXFxcXHtcIiwgXCJcXFxcbGJyYWNlXCIsIFwiXFxcXH1cIiwgXCJcXFxccmJyYWNlXCIsIFwiXFxcXGxmbG9vclwiLCBcIlxcXFxyZmxvb3JcIiwgXCJcXHUyMzBhXCIsIFwiXFx1MjMwYlwiLCBcIlxcXFxsY2VpbFwiLCBcIlxcXFxyY2VpbFwiLCBcIlxcdTIzMDhcIiwgXCJcXHUyMzA5XCIsIFwiPFwiLCBcIj5cIiwgXCJcXFxcbGFuZ2xlXCIsIFwiXFx1MjdlOFwiLCBcIlxcXFxyYW5nbGVcIiwgXCJcXHUyN2U5XCIsIFwiXFxcXGx0XCIsIFwiXFxcXGd0XCIsIFwiXFxcXGx2ZXJ0XCIsIFwiXFxcXHJ2ZXJ0XCIsIFwiXFxcXGxWZXJ0XCIsIFwiXFxcXHJWZXJ0XCIsIFwiXFxcXGxncm91cFwiLCBcIlxcXFxyZ3JvdXBcIiwgXCJcXHUyN2VlXCIsIFwiXFx1MjdlZlwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIFwiXFxcXHJtb3VzdGFjaGVcIiwgXCJcXHUyM2IwXCIsIFwiXFx1MjNiMVwiLCBcIi9cIiwgXCJcXFxcYmFja3NsYXNoXCIsIFwifFwiLCBcIlxcXFx2ZXJ0XCIsIFwiXFxcXHxcIiwgXCJcXFxcVmVydFwiLCBcIlxcXFx1cGFycm93XCIsIFwiXFxcXFVwYXJyb3dcIiwgXCJcXFxcZG93bmFycm93XCIsIFwiXFxcXERvd25hcnJvd1wiLCBcIlxcXFx1cGRvd25hcnJvd1wiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCBcIi5cIl07XG5cbi8vIERlbGltaXRlciBmdW5jdGlvbnNcbmZ1bmN0aW9uIGNoZWNrRGVsaW1pdGVyKGRlbGltLCBjb250ZXh0KSB7XG4gIHZhciBzeW1EZWxpbSA9IGNoZWNrU3ltYm9sTm9kZVR5cGUoZGVsaW0pO1xuXG4gIGlmIChzeW1EZWxpbSAmJiB1dGlscy5jb250YWlucyhkZWxpbWl0ZXJzLCBzeW1EZWxpbS50ZXh0KSkge1xuICAgIHJldHVybiBzeW1EZWxpbTtcbiAgfSBlbHNlIGlmIChzeW1EZWxpbSkge1xuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCBkZWxpbWl0ZXIgJ1wiICsgc3ltRGVsaW0udGV4dCArIFwiJyBhZnRlciAnXCIgKyBjb250ZXh0LmZ1bmNOYW1lICsgXCInXCIsIGRlbGltKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgZGVsaW1pdGVyIHR5cGUgJ1wiICsgZGVsaW0udHlwZSArIFwiJ1wiLCBkZWxpbSk7XG4gIH1cbn1cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImRlbGltc2l6aW5nXCIsXG4gIG5hbWVzOiBbXCJcXFxcYmlnbFwiLCBcIlxcXFxCaWdsXCIsIFwiXFxcXGJpZ2dsXCIsIFwiXFxcXEJpZ2dsXCIsIFwiXFxcXGJpZ3JcIiwgXCJcXFxcQmlnclwiLCBcIlxcXFxiaWdnclwiLCBcIlxcXFxCaWdnclwiLCBcIlxcXFxiaWdtXCIsIFwiXFxcXEJpZ21cIiwgXCJcXFxcYmlnZ21cIiwgXCJcXFxcQmlnZ21cIiwgXCJcXFxcYmlnXCIsIFwiXFxcXEJpZ1wiLCBcIlxcXFxiaWdnXCIsIFwiXFxcXEJpZ2dcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wicHJpbWl0aXZlXCJdXG4gIH0sXG4gIGhhbmRsZXI6IChjb250ZXh0LCBhcmdzKSA9PiB7XG4gICAgdmFyIGRlbGltID0gY2hlY2tEZWxpbWl0ZXIoYXJnc1swXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZGVsaW1zaXppbmdcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBzaXplOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5zaXplLFxuICAgICAgbWNsYXNzOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5tY2xhc3MsXG4gICAgICBkZWxpbTogZGVsaW0udGV4dFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBpZiAoZ3JvdXAuZGVsaW0gPT09IFwiLlwiKSB7XG4gICAgICAvLyBFbXB0eSBkZWxpbWl0ZXJzIHN0aWxsIGNvdW50IGFzIGVsZW1lbnRzLCBldmVuIHRob3VnaCB0aGV5IGRvbid0XG4gICAgICAvLyBzaG93IGFueXRoaW5nLlxuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtncm91cC5tY2xhc3NdKTtcbiAgICB9IC8vIFVzZSBkZWxpbWl0ZXIuc2l6ZWREZWxpbSB0byBnZW5lcmF0ZSB0aGUgZGVsaW1pdGVyLlxuXG5cbiAgICByZXR1cm4gZGVsaW1pdGVyLnNpemVkRGVsaW0oZ3JvdXAuZGVsaW0sIGdyb3VwLnNpemUsIG9wdGlvbnMsIGdyb3VwLm1vZGUsIFtncm91cC5tY2xhc3NdKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZ3JvdXAgPT4ge1xuICAgIHZhciBjaGlsZHJlbiA9IFtdO1xuXG4gICAgaWYgKGdyb3VwLmRlbGltICE9PSBcIi5cIikge1xuICAgICAgY2hpbGRyZW4ucHVzaChtYWtlVGV4dChncm91cC5kZWxpbSwgZ3JvdXAubW9kZSkpO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBjaGlsZHJlbik7XG5cbiAgICBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcGVuXCIgfHwgZ3JvdXAubWNsYXNzID09PSBcIm1jbG9zZVwiKSB7XG4gICAgICAvLyBPbmx5IHNvbWUgb2YgdGhlIGRlbGltc2l6aW5nIGZ1bmN0aW9ucyBhY3QgYXMgZmVuY2VzLCBhbmQgdGhleVxuICAgICAgLy8gcmV0dXJuIFwibW9wZW5cIiBvciBcIm1jbG9zZVwiIG1jbGFzcy5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFeHBsaWNpdGx5IGRpc2FibGUgZmVuY2luZyBpZiBpdCdzIG5vdCBhIGZlbmNlLCB0byBvdmVycmlkZSB0aGVcbiAgICAgIC8vIGRlZmF1bHRzLlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcImZhbHNlXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICAgIHZhciBzaXplID0gbWFrZUVtKGRlbGltaXRlci5zaXplVG9NYXhIZWlnaHRbZ3JvdXAuc2l6ZV0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWluc2l6ZVwiLCBzaXplKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1heHNpemVcIiwgc2l6ZSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBhc3NlcnRQYXJzZWQoZ3JvdXApIHtcbiAgaWYgKCFncm91cC5ib2R5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLlwiKTtcbiAgfVxufVxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGVmdHJpZ2h0LXJpZ2h0XCIsXG4gIG5hbWVzOiBbXCJcXFxccmlnaHRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBwcmltaXRpdmU6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKGNvbnRleHQsIGFyZ3MpID0+IHtcbiAgICAvLyBcXGxlZnQgY2FzZSBiZWxvdyB0cmlnZ2VycyBwYXJzaW5nIG9mIFxccmlnaHQgaW5cbiAgICAvLyAgIGBjb25zdCByaWdodCA9IHBhcnNlci5wYXJzZUZ1bmN0aW9uKCk7YFxuICAgIC8vIHVzZXMgdGhpcyByZXR1cm4gdmFsdWUuXG4gICAgdmFyIGNvbG9yID0gY29udGV4dC5wYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoXCJcXFxcY3VycmVudEBjb2xvclwiKTtcblxuICAgIGlmIChjb2xvciAmJiB0eXBlb2YgY29sb3IgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXGN1cnJlbnRAY29sb3Igc2V0IHRvIG5vbi1zdHJpbmcgaW4gXFxcXHJpZ2h0XCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxlZnRyaWdodC1yaWdodFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGRlbGltOiBjaGVja0RlbGltaXRlcihhcmdzWzBdLCBjb250ZXh0KS50ZXh0LFxuICAgICAgY29sb3IgLy8gdW5kZWZpbmVkIGlmIG5vdCBzZXQgdmlhIFxcY29sb3JcblxuICAgIH07XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImxlZnRyaWdodFwiLFxuICBuYW1lczogW1wiXFxcXGxlZnRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBwcmltaXRpdmU6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKGNvbnRleHQsIGFyZ3MpID0+IHtcbiAgICB2YXIgZGVsaW0gPSBjaGVja0RlbGltaXRlcihhcmdzWzBdLCBjb250ZXh0KTtcbiAgICB2YXIgcGFyc2VyID0gY29udGV4dC5wYXJzZXI7IC8vIFBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keVxuXG4gICAgKytwYXJzZXIubGVmdHJpZ2h0RGVwdGg7IC8vIHBhcnNlRXhwcmVzc2lvbiBzdG9wcyBiZWZvcmUgJ1xcXFxyaWdodCdcblxuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSk7XG4gICAgLS1wYXJzZXIubGVmdHJpZ2h0RGVwdGg7IC8vIENoZWNrIHRoZSBuZXh0IHRva2VuXG5cbiAgICBwYXJzZXIuZXhwZWN0KFwiXFxcXHJpZ2h0XCIsIGZhbHNlKTtcbiAgICB2YXIgcmlnaHQgPSBhc3NlcnROb2RlVHlwZShwYXJzZXIucGFyc2VGdW5jdGlvbigpLCBcImxlZnRyaWdodC1yaWdodFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHRcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keSxcbiAgICAgIGxlZnQ6IGRlbGltLnRleHQsXG4gICAgICByaWdodDogcmlnaHQuZGVsaW0sXG4gICAgICByaWdodENvbG9yOiByaWdodC5jb2xvclxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBhc3NlcnRQYXJzZWQoZ3JvdXApOyAvLyBCdWlsZCB0aGUgaW5uZXIgZXhwcmVzc2lvblxuXG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSwgW1wibW9wZW5cIiwgXCJtY2xvc2VcIl0pO1xuICAgIHZhciBpbm5lckhlaWdodCA9IDA7XG4gICAgdmFyIGlubmVyRGVwdGggPSAwO1xuICAgIHZhciBoYWRNaWRkbGUgPSBmYWxzZTsgLy8gQ2FsY3VsYXRlIGl0cyBoZWlnaHQgYW5kIGRlcHRoXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlubmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgIC8vIFwibWlkZGxlXCIncyBodG1sQnVpbGRlci5cbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIGlmIChpbm5lcltpXS5pc01pZGRsZSkge1xuICAgICAgICBoYWRNaWRkbGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5uZXJIZWlnaHQgPSBNYXRoLm1heChpbm5lcltpXS5oZWlnaHQsIGlubmVySGVpZ2h0KTtcbiAgICAgICAgaW5uZXJEZXB0aCA9IE1hdGgubWF4KGlubmVyW2ldLmRlcHRoLCBpbm5lckRlcHRoKTtcbiAgICAgIH1cbiAgICB9IC8vIFRoZSBzaXplIG9mIGRlbGltaXRlcnMgaXMgdGhlIHNhbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBzdHlsZSB3ZSBhcmVcbiAgICAvLyBpbi4gVGh1cywgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBkZWxpbWl0ZXIgd2UgbmVlZCBhcm91bmRcbiAgICAvLyBhIGdyb3VwLCB3ZSBzY2FsZSBkb3duIHRoZSBpbm5lciBzaXplIGJhc2VkIG9uIHRoZSBzaXplLlxuXG5cbiAgICBpbm5lckhlaWdodCAqPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgIGlubmVyRGVwdGggKj0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB2YXIgbGVmdERlbGltO1xuXG4gICAgaWYgKGdyb3VwLmxlZnQgPT09IFwiLlwiKSB7XG4gICAgICAvLyBFbXB0eSBkZWxpbWl0ZXJzIGluIFxcbGVmdCBhbmQgXFxyaWdodCBtYWtlIG51bGwgZGVsaW1pdGVyIHNwYWNlcy5cbiAgICAgIGxlZnREZWxpbSA9IG1ha2VOdWxsRGVsaW1pdGVyKG9wdGlvbnMsIFtcIm1vcGVuXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB1c2UgbGVmdFJpZ2h0RGVsaW0gdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3Qgc2l6ZWRcbiAgICAgIC8vIGRlbGltaXRlci5cbiAgICAgIGxlZnREZWxpbSA9IGRlbGltaXRlci5sZWZ0UmlnaHREZWxpbShncm91cC5sZWZ0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW1wibW9wZW5cIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGV4cHJlc3Npb25cblxuXG4gICAgaW5uZXIudW5zaGlmdChsZWZ0RGVsaW0pOyAvLyBIYW5kbGUgbWlkZGxlIGRlbGltaXRlcnNcblxuICAgIGlmIChoYWRNaWRkbGUpIHtcbiAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBpbm5lci5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIG1pZGRsZURlbGltID0gaW5uZXJbX2ldOyAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgICAgLy8gXCJtaWRkbGVcIidzIGh0bWxCdWlsZGVyLlxuICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgdmFyIGlzTWlkZGxlID0gbWlkZGxlRGVsaW0uaXNNaWRkbGU7XG5cbiAgICAgICAgaWYgKGlzTWlkZGxlKSB7XG4gICAgICAgICAgLy8gQXBwbHkgdGhlIG9wdGlvbnMgdGhhdCB3ZXJlIGFjdGl2ZSB3aGVuIFxcbWlkZGxlIHdhcyBjYWxsZWRcbiAgICAgICAgICBpbm5lcltfaV0gPSBkZWxpbWl0ZXIubGVmdFJpZ2h0RGVsaW0oaXNNaWRkbGUuZGVsaW0sIGlubmVySGVpZ2h0LCBpbm5lckRlcHRoLCBpc01pZGRsZS5vcHRpb25zLCBncm91cC5tb2RlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmlnaHREZWxpbTsgLy8gU2FtZSBmb3IgdGhlIHJpZ2h0IGRlbGltaXRlciwgYnV0IHVzaW5nIGNvbG9yIHNwZWNpZmllZCBieSBcXGNvbG9yXG5cbiAgICBpZiAoZ3JvdXAucmlnaHQgPT09IFwiLlwiKSB7XG4gICAgICByaWdodERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibWNsb3NlXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNvbG9yT3B0aW9ucyA9IGdyb3VwLnJpZ2h0Q29sb3IgPyBvcHRpb25zLndpdGhDb2xvcihncm91cC5yaWdodENvbG9yKSA6IG9wdGlvbnM7XG4gICAgICByaWdodERlbGltID0gZGVsaW1pdGVyLmxlZnRSaWdodERlbGltKGdyb3VwLnJpZ2h0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgY29sb3JPcHRpb25zLCBncm91cC5tb2RlLCBbXCJtY2xvc2VcIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24uXG5cblxuICAgIGlubmVyLnB1c2gocmlnaHREZWxpbSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1pbm5lclwiXSwgaW5uZXIsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBhc3NlcnRQYXJzZWQoZ3JvdXApO1xuICAgIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICAgIGlmIChncm91cC5sZWZ0ICE9PSBcIi5cIikge1xuICAgICAgdmFyIGxlZnROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbWFrZVRleHQoZ3JvdXAubGVmdCwgZ3JvdXAubW9kZSldKTtcbiAgICAgIGxlZnROb2RlLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwidHJ1ZVwiKTtcbiAgICAgIGlubmVyLnVuc2hpZnQobGVmdE5vZGUpO1xuICAgIH1cblxuICAgIGlmIChncm91cC5yaWdodCAhPT0gXCIuXCIpIHtcbiAgICAgIHZhciByaWdodE5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC5yaWdodCwgZ3JvdXAubW9kZSldKTtcbiAgICAgIHJpZ2h0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG5cbiAgICAgIGlmIChncm91cC5yaWdodENvbG9yKSB7XG4gICAgICAgIHJpZ2h0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJtYXRoY29sb3JcIiwgZ3JvdXAucmlnaHRDb2xvcik7XG4gICAgICB9XG5cbiAgICAgIGlubmVyLnB1c2gocmlnaHROb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZVJvdyhpbm5lcik7XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1pZGRsZVwiLFxuICBuYW1lczogW1wiXFxcXG1pZGRsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoY29udGV4dCwgYXJncykgPT4ge1xuICAgIHZhciBkZWxpbSA9IGNoZWNrRGVsaW1pdGVyKGFyZ3NbMF0sIGNvbnRleHQpO1xuXG4gICAgaWYgKCFjb250ZXh0LnBhcnNlci5sZWZ0cmlnaHREZXB0aCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcbWlkZGxlIHdpdGhvdXQgcHJlY2VkaW5nIFxcXFxsZWZ0XCIsIGRlbGltKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtaWRkbGVcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBkZWxpbTogZGVsaW0udGV4dFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbWlkZGxlRGVsaW07XG5cbiAgICBpZiAoZ3JvdXAuZGVsaW0gPT09IFwiLlwiKSB7XG4gICAgICBtaWRkbGVEZWxpbSA9IG1ha2VOdWxsRGVsaW1pdGVyKG9wdGlvbnMsIFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWlkZGxlRGVsaW0gPSBkZWxpbWl0ZXIuc2l6ZWREZWxpbShncm91cC5kZWxpbSwgMSwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW10pO1xuICAgICAgdmFyIGlzTWlkZGxlID0ge1xuICAgICAgICBkZWxpbTogZ3JvdXAuZGVsaW0sXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIH07IC8vIFByb3BlcnR5IGBpc01pZGRsZWAgbm90IGRlZmluZWQgb24gYHNwYW5gLiBJdCBpcyBvbmx5IHVzZWQgaW5cbiAgICAgIC8vIHRoaXMgZmlsZSBhYm92ZS5cbiAgICAgIC8vIFRPRE86IEZpeCB0aGlzIHZpb2xhdGlvbiBvZiB0aGUgYHNwYW5gIHR5cGUgYW5kIHBvc3NpYmx5IHJlbmFtZVxuICAgICAgLy8gdGhpbmdzIHNpbmNlIGBpc01pZGRsZWAgc291bmRzIGxpa2UgYSBib29sZWFuLCBidXQgaXMgYSBzdHJ1Y3QuXG4gICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgIG1pZGRsZURlbGltLmlzTWlkZGxlID0gaXNNaWRkbGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pZGRsZURlbGltO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBBIEZpcmVmb3ggXFxtaWRkbGUgd2lsbCBzdHJldGNoIGEgY2hhcmFjdGVyIHZlcnRpY2FsbHkgb25seSBpZiBpdFxuICAgIC8vIGlzIGluIHRoZSBmZW5jZSBwYXJ0IG9mIHRoZSBvcGVyYXRvciBkaWN0aW9uYXJ5IGF0OlxuICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9NYXRoTUwzL2FwcGVuZGl4Yy5odG1sLlxuICAgIC8vIFNvIHdlIG5lZWQgdG8gYXZvaWQgVSsyMjIzIGFuZCB1c2UgcGxhaW4gXCJ8XCIgaW5zdGVhZC5cbiAgICB2YXIgdGV4dE5vZGUgPSBncm91cC5kZWxpbSA9PT0gXCJcXFxcdmVydFwiIHx8IGdyb3VwLmRlbGltID09PSBcInxcIiA/IG1ha2VUZXh0KFwifFwiLCBcInRleHRcIikgOiBtYWtlVGV4dChncm91cC5kZWxpbSwgZ3JvdXAubW9kZSk7XG4gICAgdmFyIG1pZGRsZU5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFt0ZXh0Tm9kZV0pO1xuICAgIG1pZGRsZU5vZGUuc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpOyAvLyBNYXRoTUwgZ2l2ZXMgNS8xOGVtIHNwYWNpbmcgdG8gZWFjaCA8bW8+IGVsZW1lbnQuXG4gICAgLy8gXFxtaWRkbGUgc2hvdWxkIGdldCBkZWxpbWl0ZXIgc3BhY2luZyBpbnN0ZWFkLlxuXG4gICAgbWlkZGxlTm9kZS5zZXRBdHRyaWJ1dGUoXCJsc3BhY2VcIiwgXCIwLjA1ZW1cIik7XG4gICAgbWlkZGxlTm9kZS5zZXRBdHRyaWJ1dGUoXCJyc3BhY2VcIiwgXCIwLjA1ZW1cIik7XG4gICAgcmV0dXJuIG1pZGRsZU5vZGU7XG4gIH1cbn0pO1xuXG52YXIgaHRtbEJ1aWxkZXIkNyA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAvLyBcXGNhbmNlbCwgXFxiY2FuY2VsLCBcXHhjYW5jZWwsIFxcc291dCwgXFxmYm94LCBcXGNvbG9yYm94LCBcXGZjb2xvcmJveCwgXFxwaGFzZVxuICAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAvLyB0aGVtIGluIGEgc3Bhbi5cbiAgdmFyIGlubmVyID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkR3JvdXAkMShncm91cC5ib2R5LCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gIHZhciBsYWJlbCA9IGdyb3VwLmxhYmVsLnNsaWNlKDEpO1xuICB2YXIgc2NhbGUgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICB2YXIgaW1nO1xuICB2YXIgaW1nU2hpZnQgPSAwOyAvLyBJbiB0aGUgTGFUZVggY2FuY2VsIHBhY2thZ2UsIGxpbmUgZ2VvbWV0cnkgaXMgc2xpZ2h0bHkgZGlmZmVyZW50XG4gIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBzdWJqZWN0IGlzIHdpZGVyIHRoYW4gaXQgaXMgdGFsbCwgb3IgdmljZSB2ZXJzYS5cbiAgLy8gV2UgZG9uJ3Qga25vdyB0aGUgd2lkdGggb2YgYSBncm91cCwgc28gYXMgYSBwcm94eSwgd2UgdGVzdCBpZlxuICAvLyB0aGUgc3ViamVjdCBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIuIFRoaXMgY2FwdHVyZXMgbW9zdCBvZiB0aGVcbiAgLy8gc3ViamVjdHMgdGhhdCBzaG91bGQgZ2V0IHRoZSBcInRhbGxcIiB0cmVhdG1lbnQuXG5cbiAgdmFyIGlzU2luZ2xlQ2hhciA9IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGdyb3VwLmJvZHkpO1xuXG4gIGlmIChsYWJlbCA9PT0gXCJzb3V0XCIpIHtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiLCBcInNvdXRcIl0pO1xuICAgIGltZy5oZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MgLyBzY2FsZTtcbiAgICBpbWdTaGlmdCA9IC0wLjUgKiBvcHRpb25zLmZvbnRNZXRyaWNzKCkueEhlaWdodDtcbiAgfSBlbHNlIGlmIChsYWJlbCA9PT0gXCJwaGFzZVwiKSB7XG4gICAgLy8gU2V0IGEgY291cGxlIG9mIGRpbWVuc2lvbnMgZnJvbSB0aGUgc3RlaW5tZXR6IHBhY2thZ2UuXG4gICAgdmFyIGxpbmVXZWlnaHQgPSBjYWxjdWxhdGVTaXplKHtcbiAgICAgIG51bWJlcjogMC42LFxuICAgICAgdW5pdDogXCJwdFwiXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgdmFyIGNsZWFyYW5jZSA9IGNhbGN1bGF0ZVNpemUoe1xuICAgICAgbnVtYmVyOiAwLjM1LFxuICAgICAgdW5pdDogXCJleFwiXG4gICAgfSwgb3B0aW9ucyk7IC8vIFByZXZlbnQgc2l6ZSBjaGFuZ2VzIGxpa2UgXFxIdWdlIGZyb20gYWZmZWN0aW5nIGxpbmUgdGhpY2tuZXNzXG5cbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVNpemluZygpO1xuICAgIHNjYWxlID0gc2NhbGUgLyBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgIHZhciBhbmdsZUhlaWdodCA9IGlubmVyLmhlaWdodCArIGlubmVyLmRlcHRoICsgbGluZVdlaWdodCArIGNsZWFyYW5jZTsgLy8gUmVzZXJ2ZSBhIGxlZnQgcGFkIGZvciB0aGUgYW5nbGUuXG5cbiAgICBpbm5lci5zdHlsZS5wYWRkaW5nTGVmdCA9IG1ha2VFbShhbmdsZUhlaWdodCAvIDIgKyBsaW5lV2VpZ2h0KTsgLy8gQ3JlYXRlIGFuIFNWR1xuXG4gICAgdmFyIHZpZXdCb3hIZWlnaHQgPSBNYXRoLmZsb29yKDEwMDAgKiBhbmdsZUhlaWdodCAqIHNjYWxlKTtcbiAgICB2YXIgcGF0aCA9IHBoYXNlUGF0aCh2aWV3Qm94SGVpZ2h0KTtcbiAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKFtuZXcgUGF0aE5vZGUoXCJwaGFzZVwiLCBwYXRoKV0sIHtcbiAgICAgIFwid2lkdGhcIjogXCI0MDBlbVwiLFxuICAgICAgXCJoZWlnaHRcIjogbWFrZUVtKHZpZXdCb3hIZWlnaHQgLyAxMDAwKSxcbiAgICAgIFwidmlld0JveFwiOiBcIjAgMCA0MDAwMDAgXCIgKyB2aWV3Qm94SGVpZ2h0LFxuICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IFwieE1pbllNaW4gc2xpY2VcIlxuICAgIH0pOyAvLyBXcmFwIGl0IGluIGEgc3BhbiB3aXRoIG92ZXJmbG93OiBoaWRkZW4uXG5cbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3ZnU3BhbihbXCJoaWRlLXRhaWxcIl0sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gICAgaW1nLnN0eWxlLmhlaWdodCA9IG1ha2VFbShhbmdsZUhlaWdodCk7XG4gICAgaW1nU2hpZnQgPSBpbm5lci5kZXB0aCArIGxpbmVXZWlnaHQgKyBjbGVhcmFuY2U7XG4gIH0gZWxzZSB7XG4gICAgLy8gQWRkIGhvcml6b250YWwgcGFkZGluZ1xuICAgIGlmICgvY2FuY2VsLy50ZXN0KGxhYmVsKSkge1xuICAgICAgaWYgKCFpc1NpbmdsZUNoYXIpIHtcbiAgICAgICAgaW5uZXIuY2xhc3Nlcy5wdXNoKFwiY2FuY2VsLXBhZFwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxhYmVsID09PSBcImFuZ2xcIikge1xuICAgICAgaW5uZXIuY2xhc3Nlcy5wdXNoKFwiYW5nbHBhZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5uZXIuY2xhc3Nlcy5wdXNoKFwiYm94cGFkXCIpO1xuICAgIH0gLy8gQWRkIHZlcnRpY2FsIHBhZGRpbmdcblxuXG4gICAgdmFyIHRvcFBhZCA9IDA7XG4gICAgdmFyIGJvdHRvbVBhZCA9IDA7XG4gICAgdmFyIHJ1bGVUaGlja25lc3MgPSAwOyAvLyByZWY6IGNhbmNlbCBwYWNrYWdlOiBcXGFkdmFuY2VcXHRvdGFsaGVpZ2h0MlxccEAgJSBcIisyXCJcblxuICAgIGlmICgvYm94Ly50ZXN0KGxhYmVsKSkge1xuICAgICAgcnVsZVRoaWNrbmVzcyA9IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5mYm94cnVsZSwgLy8gZGVmYXVsdFxuICAgICAgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC8vIFVzZXIgb3ZlcnJpZGUuXG4gICAgICApO1xuICAgICAgdG9wUGFkID0gb3B0aW9ucy5mb250TWV0cmljcygpLmZib3hzZXAgKyAobGFiZWwgPT09IFwiY29sb3Jib3hcIiA/IDAgOiBydWxlVGhpY2tuZXNzKTtcbiAgICAgIGJvdHRvbVBhZCA9IHRvcFBhZDtcbiAgICB9IGVsc2UgaWYgKGxhYmVsID09PSBcImFuZ2xcIikge1xuICAgICAgcnVsZVRoaWNrbmVzcyA9IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcywgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzKTtcbiAgICAgIHRvcFBhZCA9IDQgKiBydWxlVGhpY2tuZXNzOyAvLyBnYXAgPSAzIMOXIGxpbmUsIHBsdXMgdGhlIGxpbmUgaXRzZWxmLlxuXG4gICAgICBib3R0b21QYWQgPSBNYXRoLm1heCgwLCAwLjI1IC0gaW5uZXIuZGVwdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3BQYWQgPSBpc1NpbmdsZUNoYXIgPyAwLjIgOiAwO1xuICAgICAgYm90dG9tUGFkID0gdG9wUGFkO1xuICAgIH1cblxuICAgIGltZyA9IHN0cmV0Y2h5LmVuY2xvc2VTcGFuKGlubmVyLCBsYWJlbCwgdG9wUGFkLCBib3R0b21QYWQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKC9mYm94fGJveGVkfGZjb2xvcmJveC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGltZy5zdHlsZS5ib3JkZXJTdHlsZSA9IFwic29saWRcIjtcbiAgICAgIGltZy5zdHlsZS5ib3JkZXJXaWR0aCA9IG1ha2VFbShydWxlVGhpY2tuZXNzKTtcbiAgICB9IGVsc2UgaWYgKGxhYmVsID09PSBcImFuZ2xcIiAmJiBydWxlVGhpY2tuZXNzICE9PSAwLjA0OSkge1xuICAgICAgaW1nLnN0eWxlLmJvcmRlclRvcFdpZHRoID0gbWFrZUVtKHJ1bGVUaGlja25lc3MpO1xuICAgICAgaW1nLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBtYWtlRW0ocnVsZVRoaWNrbmVzcyk7XG4gICAgfVxuXG4gICAgaW1nU2hpZnQgPSBpbm5lci5kZXB0aCArIGJvdHRvbVBhZDtcblxuICAgIGlmIChncm91cC5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgIGltZy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBncm91cC5iYWNrZ3JvdW5kQ29sb3I7XG5cbiAgICAgIGlmIChncm91cC5ib3JkZXJDb2xvcikge1xuICAgICAgICBpbWcuc3R5bGUuYm9yZGVyQ29sb3IgPSBncm91cC5ib3JkZXJDb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgdmxpc3Q7XG5cbiAgaWYgKGdyb3VwLmJhY2tncm91bmRDb2xvcikge1xuICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgIGNoaWxkcmVuOiBbLy8gUHV0IHRoZSBjb2xvciBiYWNrZ3JvdW5kIGJlaGluZCBpbm5lcjtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGltZyxcbiAgICAgICAgc2hpZnQ6IGltZ1NoaWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lcixcbiAgICAgICAgc2hpZnQ6IDBcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNsYXNzZXMgPSAvY2FuY2VsfHBoYXNlLy50ZXN0KGxhYmVsKSA/IFtcInN2Zy1hbGlnblwiXSA6IFtdO1xuICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgIGNoaWxkcmVuOiBbLy8gV3JpdGUgdGhlIFxcY2FuY2VsIHN0cm9rZSBvbiB0b3Agb2YgaW5uZXIuXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lcixcbiAgICAgICAgc2hpZnQ6IDBcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGltZyxcbiAgICAgICAgc2hpZnQ6IGltZ1NoaWZ0LFxuICAgICAgICB3cmFwcGVyQ2xhc3NlczogY2xhc3Nlc1xuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICgvY2FuY2VsLy50ZXN0KGxhYmVsKSkge1xuICAgIC8vIFRoZSBjYW5jZWwgcGFja2FnZSBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCBjYW5jZWwgbGluZXMgYWRkIHRoZWlyIGhlaWdodFxuICAgIC8vIHRvIHRoZSBleHByZXNzaW9uLCBidXQgdGVzdHMgc2hvdyB0aGF0IGlzbid0IGhvdyBpdCBhY3R1YWxseSB3b3Jrcy5cbiAgICB2bGlzdC5oZWlnaHQgPSBpbm5lci5oZWlnaHQ7XG4gICAgdmxpc3QuZGVwdGggPSBpbm5lci5kZXB0aDtcbiAgfVxuXG4gIGlmICgvY2FuY2VsLy50ZXN0KGxhYmVsKSAmJiAhaXNTaW5nbGVDaGFyKSB7XG4gICAgLy8gY2FuY2VsIGRvZXMgbm90IGNyZWF0ZSBob3JpeiBzcGFjZSBmb3IgaXRzIGxpbmUgZXh0ZW5zaW9uLlxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwiY2FuY2VsLWxhcFwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9XG59O1xuXG52YXIgbWF0aG1sQnVpbGRlciQ2ID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIHZhciBmYm94c2VwID0gMDtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShncm91cC5sYWJlbC5pbmRleE9mKFwiY29sb3Jib3hcIikgPiAtMSA/IFwibXBhZGRlZFwiIDogXCJtZW5jbG9zZVwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gIHN3aXRjaCAoZ3JvdXAubGFiZWwpIHtcbiAgICBjYXNlIFwiXFxcXGNhbmNlbFwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcInVwZGlhZ29uYWxzdHJpa2VcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJcXFxcYmNhbmNlbFwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcImRvd25kaWFnb25hbHN0cmlrZVwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFxwaGFzZVwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcInBoYXNvcmFuZ2xlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXHNvdXRcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJob3Jpem9udGFsc3RyaWtlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXGZib3hcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJib3hcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJcXFxcYW5nbFwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcImFjdHVhcmlhbFwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFxmY29sb3Jib3hcIjpcbiAgICBjYXNlIFwiXFxcXGNvbG9yYm94XCI6XG4gICAgICAvLyA8bWVuY2xvc2U+IGRvZXNuJ3QgaGF2ZSBhIGdvb2Qgbm90YXRpb24gb3B0aW9uLiBTbyB1c2UgPG1wYWRkZWQ+XG4gICAgICAvLyBpbnN0ZWFkLiBTZXQgc29tZSBhdHRyaWJ1dGVzIHRoYXQgY29tZSBpbmNsdWRlZCB3aXRoIDxtZW5jbG9zZT4uXG4gICAgICBmYm94c2VwID0gb3B0aW9ucy5mb250TWV0cmljcygpLmZib3hzZXAgKiBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIrXCIgKyAyICogZmJveHNlcCArIFwicHRcIik7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIitcIiArIDIgKiBmYm94c2VwICsgXCJwdFwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIGZib3hzZXAgKyBcInB0XCIpOyAvL1xuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcInZvZmZzZXRcIiwgZmJveHNlcCArIFwicHRcIik7XG5cbiAgICAgIGlmIChncm91cC5sYWJlbCA9PT0gXCJcXFxcZmNvbG9yYm94XCIpIHtcbiAgICAgICAgdmFyIHRoayA9IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5mYm94cnVsZSwgLy8gZGVmYXVsdFxuICAgICAgICBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MgLy8gdXNlciBvdmVycmlkZVxuICAgICAgICApO1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiYm9yZGVyOiBcIiArIHRoayArIFwiZW0gc29saWQgXCIgKyBTdHJpbmcoZ3JvdXAuYm9yZGVyQ29sb3IpKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXHhjYW5jZWxcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJ1cGRpYWdvbmFsc3RyaWtlIGRvd25kaWFnb25hbHN0cmlrZVwiKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgaWYgKGdyb3VwLmJhY2tncm91bmRDb2xvcikge1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aGJhY2tncm91bmRcIiwgZ3JvdXAuYmFja2dyb3VuZENvbG9yKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxjb2xvcmJveFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCIsIFwidGV4dFwiXVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBjb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzFdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcixcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ3LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDZcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxmY29sb3Jib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMyxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFyZ1R5cGVzOiBbXCJjb2xvclwiLCBcImNvbG9yXCIsIFwidGV4dFwiXVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjIsIGFyZ3MsIG9wdEFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjI7XG4gICAgdmFyIGJvcmRlckNvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYmFja2dyb3VuZENvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMl07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBib3JkZXJDb2xvcixcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ3LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDZcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxmYm94XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcImhib3hcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjMsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYzO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IFwiXFxcXGZib3hcIixcbiAgICAgIGJvZHk6IGFyZ3NbMF1cbiAgICB9O1xuICB9XG5cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxjYW5jZWxcIiwgXCJcXFxcYmNhbmNlbFwiLCBcIlxcXFx4Y2FuY2VsXCIsIFwiXFxcXHNvdXRcIiwgXCJcXFxccGhhc2VcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjQsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjQ7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDcsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNlxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW5jbG9zZVwiLFxuICBuYW1lczogW1wiXFxcXGFuZ2xcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wiaGJveFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiBmYWxzZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjUsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY1O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IFwiXFxcXGFuZ2xcIixcbiAgICAgIGJvZHk6IGFyZ3NbMF1cbiAgICB9O1xuICB9XG5cbn0pO1xuXG4vKipcbiAqIEFsbCByZWdpc3RlcmVkIGVudmlyb25tZW50cy5cbiAqIGBlbnZpcm9ubWVudHMuanNgIGV4cG9ydHMgdGhpcyBzYW1lIGRpY3Rpb25hcnkgYWdhaW4gYW5kIG1ha2VzIGl0IHB1YmxpYy5cbiAqIGBQYXJzZXIuanNgIHJlcXVpcmVzIHRoaXMgZGljdGlvbmFyeSB2aWEgYGVudmlyb25tZW50cy5qc2AuXG4gKi9cbnZhciBfZW52aXJvbm1lbnRzID0ge307XG5mdW5jdGlvbiBkZWZpbmVFbnZpcm9ubWVudChfcmVmKSB7XG4gIHZhciB7XG4gICAgdHlwZSxcbiAgICBuYW1lcyxcbiAgICBwcm9wcyxcbiAgICBoYW5kbGVyLFxuICAgIGh0bWxCdWlsZGVyLFxuICAgIG1hdGhtbEJ1aWxkZXJcbiAgfSA9IF9yZWY7XG4gIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBvZiBlbnZpcm9ubWVudHMuXG4gIHZhciBkYXRhID0ge1xuICAgIHR5cGUsXG4gICAgbnVtQXJnczogcHJvcHMubnVtQXJncyB8fCAwLFxuICAgIGFsbG93ZWRJblRleHQ6IGZhbHNlLFxuICAgIG51bU9wdGlvbmFsQXJnczogMCxcbiAgICBoYW5kbGVyXG4gIH07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkge1xuICAgIC8vIFRPRE86IFRoZSB2YWx1ZSB0eXBlIG9mIF9lbnZpcm9ubWVudHMgc2hvdWxkIGJlIGEgdHlwZSB1bmlvbiBvZiBhbGxcbiAgICAvLyBwb3NzaWJsZSBgRW52U3BlYzw+YCBwb3NzaWJpbGl0aWVzIGluc3RlYWQgb2YgYEVudlNwZWM8Kj5gLCB3aGljaCBpc1xuICAgIC8vIGFuIGV4aXN0ZW50aWFsIHR5cGUuXG4gICAgX2Vudmlyb25tZW50c1tuYW1lc1tpXV0gPSBkYXRhO1xuICB9XG5cbiAgaWYgKGh0bWxCdWlsZGVyKSB7XG4gICAgX2h0bWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gaHRtbEJ1aWxkZXI7XG4gIH1cblxuICBpZiAobWF0aG1sQnVpbGRlcikge1xuICAgIF9tYXRobWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gbWF0aG1sQnVpbGRlcjtcbiAgfVxufVxuXG4vKipcbiAqIEFsbCByZWdpc3RlcmVkIGdsb2JhbC9idWlsdC1pbiBtYWNyb3MuXG4gKiBgbWFjcm9zLmpzYCBleHBvcnRzIHRoaXMgc2FtZSBkaWN0aW9uYXJ5IGFnYWluIGFuZCBtYWtlcyBpdCBwdWJsaWMuXG4gKiBgUGFyc2VyLmpzYCByZXF1aXJlcyB0aGlzIGRpY3Rpb25hcnkgdmlhIGBtYWNyb3MuanNgLlxuICovXG52YXIgX21hY3JvcyA9IHt9OyAvLyBUaGlzIGZ1bmN0aW9uIG1pZ2h0IG9uZSBkYXkgYWNjZXB0IGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgYW5kIGRvIG1vcmUgdGhpbmdzLlxuXG5mdW5jdGlvbiBkZWZpbmVNYWNybyhuYW1lLCBib2R5KSB7XG4gIF9tYWNyb3NbbmFtZV0gPSBib2R5O1xufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb25zXG5mdW5jdGlvbiBnZXRITGluZXMocGFyc2VyKSB7XG4gIC8vIFJldHVybiBhbiBhcnJheS4gVGhlIGFycmF5IGxlbmd0aCA9IG51bWJlciBvZiBobGluZXMuXG4gIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUgYXJyYXkgdGVsbHMgaWYgdGhlIGxpbmUgaXMgZGFzaGVkLlxuICB2YXIgaGxpbmVJbmZvID0gW107XG4gIHBhcnNlci5jb25zdW1lU3BhY2VzKCk7XG4gIHZhciBueHQgPSBwYXJzZXIuZmV0Y2goKS50ZXh0O1xuXG4gIGlmIChueHQgPT09IFwiXFxcXHJlbGF4XCIpIHtcbiAgICAvLyBcXHJlbGF4IGlzIGFuIGFydGlmYWN0IG9mIHRoZSBcXGNyIG1hY3JvIGJlbG93XG4gICAgcGFyc2VyLmNvbnN1bWUoKTtcbiAgICBwYXJzZXIuY29uc3VtZVNwYWNlcygpO1xuICAgIG54dCA9IHBhcnNlci5mZXRjaCgpLnRleHQ7XG4gIH1cblxuICB3aGlsZSAobnh0ID09PSBcIlxcXFxobGluZVwiIHx8IG54dCA9PT0gXCJcXFxcaGRhc2hsaW5lXCIpIHtcbiAgICBwYXJzZXIuY29uc3VtZSgpO1xuICAgIGhsaW5lSW5mby5wdXNoKG54dCA9PT0gXCJcXFxcaGRhc2hsaW5lXCIpO1xuICAgIHBhcnNlci5jb25zdW1lU3BhY2VzKCk7XG4gICAgbnh0ID0gcGFyc2VyLmZldGNoKCkudGV4dDtcbiAgfVxuXG4gIHJldHVybiBobGluZUluZm87XG59XG5cbnZhciB2YWxpZGF0ZUFtc0Vudmlyb25tZW50Q29udGV4dCA9IGNvbnRleHQgPT4ge1xuICB2YXIgc2V0dGluZ3MgPSBjb250ZXh0LnBhcnNlci5zZXR0aW5ncztcblxuICBpZiAoIXNldHRpbmdzLmRpc3BsYXlNb2RlKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJ7XCIgKyBjb250ZXh0LmVudk5hbWUgKyBcIn0gY2FuIGJlIHVzZWQgb25seSBpblwiICsgXCIgZGlzcGxheSBtb2RlLlwiKTtcbiAgfVxufTsgLy8gYXV0b1RhZyAoYW4gYXJndW1lbnQgdG8gcGFyc2VBcnJheSkgY2FuIGJlIG9uZSBvZiB0aHJlZSB2YWx1ZXM6XG4vLyAqIHVuZGVmaW5lZDogUmVndWxhciAobm90LXRvcC1sZXZlbCkgYXJyYXk7IG5vIHRhZ3Mgb24gZWFjaCByb3dcbi8vICogdHJ1ZTogQXV0b21hdGljIGVxdWF0aW9uIG51bWJlcmluZywgb3ZlcnJpZGFibGUgYnkgXFx0YWdcbi8vICogZmFsc2U6IFRhZ3MgYWxsb3dlZCBvbiBlYWNoIHJvdywgYnV0IG5vIGF1dG9tYXRpYyBudW1iZXJpbmdcbi8vIFRoaXMgZnVuY3Rpb24gKmRvZXNuJ3QqIHdvcmsgd2l0aCB0aGUgXCJzcGxpdFwiIGVudmlyb25tZW50IG5hbWUuXG5cblxuZnVuY3Rpb24gZ2V0QXV0b1RhZyhuYW1lKSB7XG4gIGlmIChuYW1lLmluZGV4T2YoXCJlZFwiKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbmFtZS5pbmRleE9mKFwiKlwiKSA9PT0gLTE7XG4gIH0gLy8gcmV0dXJuIHVuZGVmaW5lZDtcblxufVxuLyoqXG4gKiBQYXJzZSB0aGUgYm9keSBvZiB0aGUgZW52aXJvbm1lbnQsIHdpdGggcm93cyBkZWxpbWl0ZWQgYnkgXFxcXCBhbmRcbiAqIGNvbHVtbnMgZGVsaW1pdGVkIGJ5ICYsIGFuZCBjcmVhdGUgYSBuZXN0ZWQgbGlzdCBpbiByb3ctbWFqb3Igb3JkZXJcbiAqIHdpdGggb25lIGdyb3VwIHBlciBjZWxsLiAgSWYgZ2l2ZW4gYW4gb3B0aW9uYWwgYXJndW1lbnQgc3R5bGVcbiAqIChcInRleHRcIiwgXCJkaXNwbGF5XCIsIGV0Yy4pLCB0aGVuIGVhY2ggY2VsbCBpcyBjYXN0IGludG8gdGhhdCBzdHlsZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHBhcnNlQXJyYXkocGFyc2VyLCBfcmVmLCBzdHlsZSkge1xuICB2YXIge1xuICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXIsXG4gICAgYWRkSm90LFxuICAgIGNvbHMsXG4gICAgYXJyYXlzdHJldGNoLFxuICAgIGNvbFNlcGFyYXRpb25UeXBlLFxuICAgIGF1dG9UYWcsXG4gICAgc2luZ2xlUm93LFxuICAgIGVtcHR5U2luZ2xlUm93LFxuICAgIG1heE51bUNvbHMsXG4gICAgbGVxbm9cbiAgfSA9IF9yZWY7XG4gIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuXG4gIGlmICghc2luZ2xlUm93KSB7XG4gICAgLy8gXFxjciBpcyBlcXVpdmFsZW50IHRvIFxcXFwgd2l0aG91dCB0aGUgb3B0aW9uYWwgc2l6ZSBhcmd1bWVudCAoc2VlIGJlbG93KVxuICAgIC8vIFRPRE86IHByb3ZpZGUgaGVscGZ1bCBlcnJvciB3aGVuIFxcY3IgaXMgdXNlZCBvdXRzaWRlIGFycmF5IGVudmlyb25tZW50XG4gICAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXGNyXCIsIFwiXFxcXFxcXFxcXFxccmVsYXhcIik7XG4gIH0gLy8gR2V0IGN1cnJlbnQgYXJyYXlzdHJldGNoIGlmIGl0J3Mgbm90IHNldCBieSB0aGUgZW52aXJvbm1lbnRcblxuXG4gIGlmICghYXJyYXlzdHJldGNoKSB7XG4gICAgdmFyIHN0cmV0Y2ggPSBwYXJzZXIuZ3VsbGV0LmV4cGFuZE1hY3JvQXNUZXh0KFwiXFxcXGFycmF5c3RyZXRjaFwiKTtcblxuICAgIGlmIChzdHJldGNoID09IG51bGwpIHtcbiAgICAgIC8vIERlZmF1bHQgXFxhcnJheXN0cmV0Y2ggZnJvbSBsdHRhYi5kdHhcbiAgICAgIGFycmF5c3RyZXRjaCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFycmF5c3RyZXRjaCA9IHBhcnNlRmxvYXQoc3RyZXRjaCk7XG5cbiAgICAgIGlmICghYXJyYXlzdHJldGNoIHx8IGFycmF5c3RyZXRjaCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIFxcXFxhcnJheXN0cmV0Y2g6IFwiICsgc3RyZXRjaCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFN0YXJ0IGdyb3VwIGZvciBmaXJzdCBjZWxsXG5cblxuICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgdmFyIHJvdyA9IFtdO1xuICB2YXIgYm9keSA9IFtyb3ddO1xuICB2YXIgcm93R2FwcyA9IFtdO1xuICB2YXIgaExpbmVzQmVmb3JlUm93ID0gW107XG4gIHZhciB0YWdzID0gYXV0b1RhZyAhPSBudWxsID8gW10gOiB1bmRlZmluZWQ7IC8vIGFtc21hdGggdXNlcyBcXGdsb2JhbFxcQGVxbnN3dHJ1ZSBhbmQgXFxnbG9iYWxcXEBlcW5zd2ZhbHNlIHRvIHJlcHJlc2VudFxuICAvLyB3aGV0aGVyIHRoaXMgcm93IHNob3VsZCBoYXZlIGFuIGVxdWF0aW9uIG51bWJlci4gIFNpbXVsYXRlIHRoaXMgd2l0aFxuICAvLyBhIFxcQGVxbnN3IG1hY3JvIHNldCB0byAxIG9yIDAuXG5cbiAgZnVuY3Rpb24gYmVnaW5Sb3coKSB7XG4gICAgaWYgKGF1dG9UYWcpIHtcbiAgICAgIHBhcnNlci5ndWxsZXQubWFjcm9zLnNldChcIlxcXFxAZXFuc3dcIiwgXCIxXCIsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZFJvdygpIHtcbiAgICBpZiAodGFncykge1xuICAgICAgaWYgKHBhcnNlci5ndWxsZXQubWFjcm9zLmdldChcIlxcXFxkZkB0YWdcIikpIHtcbiAgICAgICAgdGFncy5wdXNoKHBhcnNlci5zdWJwYXJzZShbbmV3IFRva2VuKFwiXFxcXGRmQHRhZ1wiKV0pKTtcbiAgICAgICAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXGRmQHRhZ1wiLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFncy5wdXNoKEJvb2xlYW4oYXV0b1RhZykgJiYgcGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KFwiXFxcXEBlcW5zd1wiKSA9PT0gXCIxXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGJlZ2luUm93KCk7IC8vIFRlc3QgZm9yIFxcaGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgYXJyYXkuXG5cbiAgaExpbmVzQmVmb3JlUm93LnB1c2goZ2V0SExpbmVzKHBhcnNlcikpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAvLyBQYXJzZSBlYWNoIGNlbGwgaW4gaXRzIG93biBncm91cCAobmFtZXNwYWNlKVxuICAgIHZhciBjZWxsID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgc2luZ2xlUm93ID8gXCJcXFxcZW5kXCIgOiBcIlxcXFxcXFxcXCIpO1xuICAgIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgICBjZWxsID0ge1xuICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBjZWxsXG4gICAgfTtcblxuICAgIGlmIChzdHlsZSkge1xuICAgICAgY2VsbCA9IHtcbiAgICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgYm9keTogW2NlbGxdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJvdy5wdXNoKGNlbGwpO1xuICAgIHZhciBuZXh0ID0gcGFyc2VyLmZldGNoKCkudGV4dDtcblxuICAgIGlmIChuZXh0ID09PSBcIiZcIikge1xuICAgICAgaWYgKG1heE51bUNvbHMgJiYgcm93Lmxlbmd0aCA9PT0gbWF4TnVtQ29scykge1xuICAgICAgICBpZiAoc2luZ2xlUm93IHx8IGNvbFNlcGFyYXRpb25UeXBlKSB7XG4gICAgICAgICAgLy8ge2VxdWF0aW9ufSBvciB7c3BsaXR9XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJUb28gbWFueSB0YWIgY2hhcmFjdGVyczogJlwiLCBwYXJzZXIubmV4dFRva2VuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB7YXJyYXl9IGVudmlyb25tZW50XG4gICAgICAgICAgcGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInRleHRFbnZcIiwgXCJUb28gZmV3IGNvbHVtbnMgXCIgKyBcInNwZWNpZmllZCBpbiB0aGUge2FycmF5fSBjb2x1bW4gYXJndW1lbnQuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxlbmRcIikge1xuICAgICAgZW5kUm93KCk7IC8vIEFycmF5cyB0ZXJtaW5hdGUgbmV3bGluZXMgd2l0aCBgXFxjcmNyYCB3aGljaCBjb25zdW1lcyBhIGBcXGNyYCBpZlxuICAgICAgLy8gdGhlIGxhc3QgbGluZSBpcyBlbXB0eS4gIEhvd2V2ZXIsIEFNUyBlbnZpcm9ubWVudHMga2VlcCB0aGVcbiAgICAgIC8vIGVtcHR5IHJvdyBpZiBpdCdzIHRoZSBvbmx5IG9uZS5cbiAgICAgIC8vIE5PVEU6IEN1cnJlbnRseSwgYGNlbGxgIGlzIHRoZSBsYXN0IGl0ZW0gYWRkZWQgaW50byBgcm93YC5cblxuICAgICAgaWYgKHJvdy5sZW5ndGggPT09IDEgJiYgY2VsbC50eXBlID09PSBcInN0eWxpbmdcIiAmJiBjZWxsLmJvZHlbMF0uYm9keS5sZW5ndGggPT09IDAgJiYgKGJvZHkubGVuZ3RoID4gMSB8fCAhZW1wdHlTaW5nbGVSb3cpKSB7XG4gICAgICAgIGJvZHkucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoTGluZXNCZWZvcmVSb3cubGVuZ3RoIDwgYm9keS5sZW5ndGggKyAxKSB7XG4gICAgICAgIGhMaW5lc0JlZm9yZVJvdy5wdXNoKFtdKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgICB2YXIgc2l6ZSA9IHZvaWQgMDsgLy8gXFxkZWZcXExldEB7XFxsZXRcXFxcXFxtYXRoQGNyfVxuICAgICAgLy8gXFxkZWZcXG1hdGhAY3J7Li4uXFxtYXRoQGNyQH1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQHtcXG5ld0BpZm5leHRjaGFyW1xcbWF0aEBjckBAe1xcbWF0aEBjckBAW1xcekBdfX1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQEBbIzFdey4uLlxcbWF0aEBjckBAQC4uLn1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQEBAe1xcY3J9XG5cbiAgICAgIGlmIChwYXJzZXIuZ3VsbGV0LmZ1dHVyZSgpLnRleHQgIT09IFwiIFwiKSB7XG4gICAgICAgIHNpemUgPSBwYXJzZXIucGFyc2VTaXplR3JvdXAodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJvd0dhcHMucHVzaChzaXplID8gc2l6ZS52YWx1ZSA6IG51bGwpO1xuICAgICAgZW5kUm93KCk7IC8vIGNoZWNrIGZvciBcXGhsaW5lKHMpIGZvbGxvd2luZyB0aGUgcm93IHNlcGFyYXRvclxuXG4gICAgICBoTGluZXNCZWZvcmVSb3cucHVzaChnZXRITGluZXMocGFyc2VyKSk7XG4gICAgICByb3cgPSBbXTtcbiAgICAgIGJvZHkucHVzaChyb3cpO1xuICAgICAgYmVnaW5Sb3coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCAmIG9yIFxcXFxcXFxcIG9yIFxcXFxjciBvciBcXFxcZW5kXCIsIHBhcnNlci5uZXh0VG9rZW4pO1xuICAgIH1cbiAgfSAvLyBFbmQgY2VsbCBncm91cFxuXG5cbiAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpOyAvLyBFbmQgYXJyYXkgZ3JvdXAgZGVmaW5pbmcgXFxjclxuXG4gIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgYWRkSm90LFxuICAgIGFycmF5c3RyZXRjaCxcbiAgICBib2R5LFxuICAgIGNvbHMsXG4gICAgcm93R2FwcyxcbiAgICBoc2tpcEJlZm9yZUFuZEFmdGVyLFxuICAgIGhMaW5lc0JlZm9yZVJvdyxcbiAgICBjb2xTZXBhcmF0aW9uVHlwZSxcbiAgICB0YWdzLFxuICAgIGxlcW5vXG4gIH07XG59IC8vIERlY2lkZXMgb24gYSBzdHlsZSBmb3IgY2VsbHMgaW4gYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIGdpdmVuXG4vLyBlbnZpcm9ubWVudCBuYW1lIHN0YXJ0cyB3aXRoIHRoZSBsZXR0ZXIgJ2QnLlxuXG5cbmZ1bmN0aW9uIGRDZWxsU3R5bGUoZW52TmFtZSkge1xuICBpZiAoZW52TmFtZS5zbGljZSgwLCAxKSA9PT0gXCJkXCIpIHtcbiAgICByZXR1cm4gXCJkaXNwbGF5XCI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwidGV4dFwiO1xuICB9XG59XG5cbnZhciBodG1sQnVpbGRlciQ2ID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIHI7XG4gIHZhciBjO1xuICB2YXIgbnIgPSBncm91cC5ib2R5Lmxlbmd0aDtcbiAgdmFyIGhMaW5lc0JlZm9yZVJvdyA9IGdyb3VwLmhMaW5lc0JlZm9yZVJvdztcbiAgdmFyIG5jID0gMDtcbiAgdmFyIGJvZHkgPSBuZXcgQXJyYXkobnIpO1xuICB2YXIgaGxpbmVzID0gW107XG4gIHZhciBydWxlVGhpY2tuZXNzID0gTWF0aC5tYXgoIC8vIEZyb20gTGFUZVggXFxzaG93dGhlXFxhcnJheXJ1bGV3aWR0aC4gRXF1YWxzIDAuMDQgZW0uXG4gIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5hcnJheVJ1bGVXaWR0aCwgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC8vIFVzZXIgb3ZlcnJpZGUuXG4gICk7IC8vIEhvcml6b250YWwgc3BhY2luZ1xuXG4gIHZhciBwdCA9IDEgLyBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtcbiAgdmFyIGFycmF5Y29sc2VwID0gNSAqIHB0OyAvLyBkZWZhdWx0IHZhbHVlLCBpLmUuIFxcYXJyYXljb2xzZXAgaW4gYXJ0aWNsZS5jbHNcblxuICBpZiAoZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgJiYgZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwic21hbGxcIikge1xuICAgIC8vIFdlJ3JlIGluIGEge3NtYWxsbWF0cml4fS4gRGVmYXVsdCBjb2x1bW4gc3BhY2UgaXMgXFx0aGlja3NwYWNlLFxuICAgIC8vIGkuZS4gNS8xOGVtID0gMC4yNzc4ZW0sIHBlciBhbXNtYXRoLmR0eCBmb3Ige3NtYWxsbWF0cml4fS5cbiAgICAvLyBCdXQgdGhhdCBuZWVkcyBhZGp1c3RtZW50IGJlY2F1c2UgTGFUZVggYXBwbGllcyBcXHNjcmlwdHN0eWxlIHRvIHRoZVxuICAgIC8vIGVudGlyZSBhcnJheSwgaW5jbHVkaW5nIHRoZSBjb2xzcGFjZSwgYnV0IHRoaXMgZnVuY3Rpb24gYXBwbGllc1xuICAgIC8vIFxcc2NyaXB0c3R5bGUgb25seSBpbnNpZGUgZWFjaCBlbGVtZW50LlxuICAgIHZhciBsb2NhbE11bHRpcGxpZXIgPSBvcHRpb25zLmhhdmluZ1N0eWxlKFN0eWxlJDEuU0NSSVBUKS5zaXplTXVsdGlwbGllcjtcbiAgICBhcnJheWNvbHNlcCA9IDAuMjc3OCAqIChsb2NhbE11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyKTtcbiAgfSAvLyBWZXJ0aWNhbCBzcGFjaW5nXG5cblxuICB2YXIgYmFzZWxpbmVza2lwID0gZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiQ0RcIiA/IGNhbGN1bGF0ZVNpemUoe1xuICAgIG51bWJlcjogMyxcbiAgICB1bml0OiBcImV4XCJcbiAgfSwgb3B0aW9ucykgOiAxMiAqIHB0OyAvLyBzZWUgc2l6ZTEwLmNsb1xuICAvLyBEZWZhdWx0IFxcam90IGZyb20gbHRtYXRoLmR0eFxuICAvLyBUT0RPKGVkZW1haW5lKTogYWxsb3cgb3ZlcnJpZGluZyBcXGpvdCB2aWEgXFxzZXRsZW5ndGggKCM2ODcpXG5cbiAgdmFyIGpvdCA9IDMgKiBwdDtcbiAgdmFyIGFycmF5c2tpcCA9IGdyb3VwLmFycmF5c3RyZXRjaCAqIGJhc2VsaW5lc2tpcDtcbiAgdmFyIGFyc3RydXRIZWlnaHQgPSAwLjcgKiBhcnJheXNraXA7IC8vIFxcc3RydXRib3ggaW4gbHRmc3N0cmMuZHR4IGFuZFxuXG4gIHZhciBhcnN0cnV0RGVwdGggPSAwLjMgKiBhcnJheXNraXA7IC8vIFxcQGFyc3RydXRib3ggaW4gbHR0YWIuZHR4XG5cbiAgdmFyIHRvdGFsSGVpZ2h0ID0gMDsgLy8gU2V0IGEgcG9zaXRpb24gZm9yIFxcaGxpbmUocykgYXQgdGhlIHRvcCBvZiB0aGUgYXJyYXksIGlmIGFueS5cblxuICBmdW5jdGlvbiBzZXRITGluZVBvcyhobGluZXNJbkdhcCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGxpbmVzSW5HYXAubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICB0b3RhbEhlaWdodCArPSAwLjI1O1xuICAgICAgfVxuXG4gICAgICBobGluZXMucHVzaCh7XG4gICAgICAgIHBvczogdG90YWxIZWlnaHQsXG4gICAgICAgIGlzRGFzaGVkOiBobGluZXNJbkdhcFtpXVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0SExpbmVQb3MoaExpbmVzQmVmb3JlUm93WzBdKTtcblxuICBmb3IgKHIgPSAwOyByIDwgZ3JvdXAuYm9keS5sZW5ndGg7ICsrcikge1xuICAgIHZhciBpbnJvdyA9IGdyb3VwLmJvZHlbcl07XG4gICAgdmFyIGhlaWdodCA9IGFyc3RydXRIZWlnaHQ7IC8vIFxcQGFycmF5IGFkZHMgYW4gXFxAYXJzdHJ1dFxuXG4gICAgdmFyIGRlcHRoID0gYXJzdHJ1dERlcHRoOyAvLyB0byBlYWNoIHRvdyAodmlhIHRoZSB0ZW1wbGF0ZSlcblxuICAgIGlmIChuYyA8IGlucm93Lmxlbmd0aCkge1xuICAgICAgbmMgPSBpbnJvdy5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIG91dHJvdyA9IG5ldyBBcnJheShpbnJvdy5sZW5ndGgpO1xuXG4gICAgZm9yIChjID0gMDsgYyA8IGlucm93Lmxlbmd0aDsgKytjKSB7XG4gICAgICB2YXIgZWx0ID0gYnVpbGRHcm91cCQxKGlucm93W2NdLCBvcHRpb25zKTtcblxuICAgICAgaWYgKGRlcHRoIDwgZWx0LmRlcHRoKSB7XG4gICAgICAgIGRlcHRoID0gZWx0LmRlcHRoO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGVpZ2h0IDwgZWx0LmhlaWdodCkge1xuICAgICAgICBoZWlnaHQgPSBlbHQuaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICBvdXRyb3dbY10gPSBlbHQ7XG4gICAgfVxuXG4gICAgdmFyIHJvd0dhcCA9IGdyb3VwLnJvd0dhcHNbcl07XG4gICAgdmFyIGdhcCA9IDA7XG5cbiAgICBpZiAocm93R2FwKSB7XG4gICAgICBnYXAgPSBjYWxjdWxhdGVTaXplKHJvd0dhcCwgb3B0aW9ucyk7XG5cbiAgICAgIGlmIChnYXAgPiAwKSB7XG4gICAgICAgIC8vIFxcQGFyZ2FycmF5Y3JcbiAgICAgICAgZ2FwICs9IGFyc3RydXREZXB0aDtcblxuICAgICAgICBpZiAoZGVwdGggPCBnYXApIHtcbiAgICAgICAgICBkZXB0aCA9IGdhcDsgLy8gXFxAeGFyZ2FycmF5Y3JcbiAgICAgICAgfVxuXG4gICAgICAgIGdhcCA9IDA7XG4gICAgICB9XG4gICAgfSAvLyBJbiBBTVMgbXVsdGlsaW5lIGVudmlyb25tZW50cyBzdWNoIGFzIGFsaWduZWQgYW5kIGdhdGhlcmVkLCByb3dzXG4gICAgLy8gY29ycmVzcG9uZCB0byBsaW5lcyB0aGF0IGhhdmUgYWRkaXRpb25hbCBcXGpvdCBhZGRlZCB0byB0aGVcbiAgICAvLyBcXGJhc2VsaW5lc2tpcCB2aWEgXFxvcGVudXAuXG5cblxuICAgIGlmIChncm91cC5hZGRKb3QpIHtcbiAgICAgIGRlcHRoICs9IGpvdDtcbiAgICB9XG5cbiAgICBvdXRyb3cuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIG91dHJvdy5kZXB0aCA9IGRlcHRoO1xuICAgIHRvdGFsSGVpZ2h0ICs9IGhlaWdodDtcbiAgICBvdXRyb3cucG9zID0gdG90YWxIZWlnaHQ7XG4gICAgdG90YWxIZWlnaHQgKz0gZGVwdGggKyBnYXA7IC8vIFxcQHlhcmdhcnJheWNyXG5cbiAgICBib2R5W3JdID0gb3V0cm93OyAvLyBTZXQgYSBwb3NpdGlvbiBmb3IgXFxobGluZShzKSwgaWYgYW55LlxuXG4gICAgc2V0SExpbmVQb3MoaExpbmVzQmVmb3JlUm93W3IgKyAxXSk7XG4gIH1cblxuICB2YXIgb2Zmc2V0ID0gdG90YWxIZWlnaHQgLyAyICsgb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQ7XG4gIHZhciBjb2xEZXNjcmlwdGlvbnMgPSBncm91cC5jb2xzIHx8IFtdO1xuICB2YXIgY29scyA9IFtdO1xuICB2YXIgY29sU2VwO1xuICB2YXIgY29sRGVzY3JOdW07XG4gIHZhciB0YWdTcGFucyA9IFtdO1xuXG4gIGlmIChncm91cC50YWdzICYmIGdyb3VwLnRhZ3Muc29tZSh0YWcgPT4gdGFnKSkge1xuICAgIC8vIEFuIGVudmlyb25tZW50IHdpdGggbWFudWFsIHRhZ3MgYW5kL29yIGF1dG9tYXRpYyBlcXVhdGlvbiBudW1iZXJzLlxuICAgIC8vIENyZWF0ZSBub2RlKHMpLCB0aGUgbGF0dGVyIG9mIHdoaWNoIHRyaWdnZXIgQ1NTIGNvdW50ZXIgaW5jcmVtZW50LlxuICAgIGZvciAociA9IDA7IHIgPCBucjsgKytyKSB7XG4gICAgICB2YXIgcncgPSBib2R5W3JdO1xuICAgICAgdmFyIHNoaWZ0ID0gcncucG9zIC0gb2Zmc2V0O1xuICAgICAgdmFyIHRhZyA9IGdyb3VwLnRhZ3Nbcl07XG4gICAgICB2YXIgdGFnU3BhbiA9IHZvaWQgMDtcblxuICAgICAgaWYgKHRhZyA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBhdXRvbWF0aWMgbnVtYmVyaW5nXG4gICAgICAgIHRhZ1NwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJlcW4tbnVtXCJdLCBbXSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gXFxub251bWJlci9cXG5vdGFnIG9yIHN0YXJyZWQgZW52aXJvbm1lbnRcbiAgICAgICAgdGFnU3BhbiA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbXSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtYW51YWwgXFx0YWdcbiAgICAgICAgdGFnU3BhbiA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBidWlsZEV4cHJlc3Npb24kMSh0YWcsIG9wdGlvbnMsIHRydWUpLCBvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgdGFnU3Bhbi5kZXB0aCA9IHJ3LmRlcHRoO1xuICAgICAgdGFnU3Bhbi5oZWlnaHQgPSBydy5oZWlnaHQ7XG4gICAgICB0YWdTcGFucy5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHRhZ1NwYW4sXG4gICAgICAgIHNoaWZ0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGMgPSAwLCBjb2xEZXNjck51bSA9IDA7IC8vIENvbnRpbnVlIHdoaWxlIGVpdGhlciB0aGVyZSBhcmUgbW9yZSBjb2x1bW5zIG9yIG1vcmUgY29sdW1uXG4gIC8vIGRlc2NyaXB0aW9ucywgc28gdHJhaWxpbmcgc2VwYXJhdG9ycyBkb24ndCBnZXQgbG9zdC5cbiAgYyA8IG5jIHx8IGNvbERlc2NyTnVtIDwgY29sRGVzY3JpcHRpb25zLmxlbmd0aDsgKytjLCArK2NvbERlc2NyTnVtKSB7XG4gICAgdmFyIGNvbERlc2NyID0gY29sRGVzY3JpcHRpb25zW2NvbERlc2NyTnVtXSB8fCB7fTtcbiAgICB2YXIgZmlyc3RTZXBhcmF0b3IgPSB0cnVlO1xuXG4gICAgd2hpbGUgKGNvbERlc2NyLnR5cGUgPT09IFwic2VwYXJhdG9yXCIpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgc2VwYXJhdG9yIGluIGEgcm93LCBhZGQgYSBzcGFjZVxuICAgICAgLy8gYmV0d2VlbiB0aGVtLlxuICAgICAgaWYgKCFmaXJzdFNlcGFyYXRvcikge1xuICAgICAgICBjb2xTZXAgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJhcnJheWNvbHNlcFwiXSwgW10pO1xuICAgICAgICBjb2xTZXAuc3R5bGUud2lkdGggPSBtYWtlRW0ob3B0aW9ucy5mb250TWV0cmljcygpLmRvdWJsZVJ1bGVTZXApO1xuICAgICAgICBjb2xzLnB1c2goY29sU2VwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbERlc2NyLnNlcGFyYXRvciA9PT0gXCJ8XCIgfHwgY29sRGVzY3Iuc2VwYXJhdG9yID09PSBcIjpcIikge1xuICAgICAgICB2YXIgbGluZVR5cGUgPSBjb2xEZXNjci5zZXBhcmF0b3IgPT09IFwifFwiID8gXCJzb2xpZFwiIDogXCJkYXNoZWRcIjtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInZlcnRpY2FsLXNlcGFyYXRvclwiXSwgW10sIG9wdGlvbnMpO1xuICAgICAgICBzZXBhcmF0b3Iuc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKHRvdGFsSGVpZ2h0KTtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBtYWtlRW0ocnVsZVRoaWNrbmVzcyk7XG4gICAgICAgIHNlcGFyYXRvci5zdHlsZS5ib3JkZXJSaWdodFN0eWxlID0gbGluZVR5cGU7XG4gICAgICAgIHNlcGFyYXRvci5zdHlsZS5tYXJnaW4gPSBcIjAgXCIgKyBtYWtlRW0oLXJ1bGVUaGlja25lc3MgLyAyKTtcblxuICAgICAgICB2YXIgX3NoaWZ0ID0gdG90YWxIZWlnaHQgLSBvZmZzZXQ7XG5cbiAgICAgICAgaWYgKF9zaGlmdCkge1xuICAgICAgICAgIHNlcGFyYXRvci5zdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1fc2hpZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29scy5wdXNoKHNlcGFyYXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgc2VwYXJhdG9yIHR5cGU6IFwiICsgY29sRGVzY3Iuc2VwYXJhdG9yKTtcbiAgICAgIH1cblxuICAgICAgY29sRGVzY3JOdW0rKztcbiAgICAgIGNvbERlc2NyID0gY29sRGVzY3JpcHRpb25zW2NvbERlc2NyTnVtXSB8fCB7fTtcbiAgICAgIGZpcnN0U2VwYXJhdG9yID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGMgPj0gbmMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBzZXB3aWR0aCA9IHZvaWQgMDtcblxuICAgIGlmIChjID4gMCB8fCBncm91cC5oc2tpcEJlZm9yZUFuZEFmdGVyKSB7XG4gICAgICBzZXB3aWR0aCA9IHV0aWxzLmRlZmx0KGNvbERlc2NyLnByZWdhcCwgYXJyYXljb2xzZXApO1xuXG4gICAgICBpZiAoc2Vwd2lkdGggIT09IDApIHtcbiAgICAgICAgY29sU2VwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiYXJyYXljb2xzZXBcIl0sIFtdKTtcbiAgICAgICAgY29sU2VwLnN0eWxlLndpZHRoID0gbWFrZUVtKHNlcHdpZHRoKTtcbiAgICAgICAgY29scy5wdXNoKGNvbFNlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNvbCA9IFtdO1xuXG4gICAgZm9yIChyID0gMDsgciA8IG5yOyArK3IpIHtcbiAgICAgIHZhciByb3cgPSBib2R5W3JdO1xuICAgICAgdmFyIGVsZW0gPSByb3dbY107XG5cbiAgICAgIGlmICghZWxlbSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9zaGlmdDIgPSByb3cucG9zIC0gb2Zmc2V0O1xuXG4gICAgICBlbGVtLmRlcHRoID0gcm93LmRlcHRoO1xuICAgICAgZWxlbS5oZWlnaHQgPSByb3cuaGVpZ2h0O1xuICAgICAgY29sLnB1c2goe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogZWxlbSxcbiAgICAgICAgc2hpZnQ6IF9zaGlmdDJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogY29sXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgY29sID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiY29sLWFsaWduLVwiICsgKGNvbERlc2NyLmFsaWduIHx8IFwiY1wiKV0sIFtjb2xdKTtcbiAgICBjb2xzLnB1c2goY29sKTtcblxuICAgIGlmIChjIDwgbmMgLSAxIHx8IGdyb3VwLmhza2lwQmVmb3JlQW5kQWZ0ZXIpIHtcbiAgICAgIHNlcHdpZHRoID0gdXRpbHMuZGVmbHQoY29sRGVzY3IucG9zdGdhcCwgYXJyYXljb2xzZXApO1xuXG4gICAgICBpZiAoc2Vwd2lkdGggIT09IDApIHtcbiAgICAgICAgY29sU2VwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiYXJyYXljb2xzZXBcIl0sIFtdKTtcbiAgICAgICAgY29sU2VwLnN0eWxlLndpZHRoID0gbWFrZUVtKHNlcHdpZHRoKTtcbiAgICAgICAgY29scy5wdXNoKGNvbFNlcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm10YWJsZVwiXSwgY29scyk7IC8vIEFkZCBcXGhsaW5lKHMpLCBpZiBhbnkuXG5cbiAgaWYgKGhsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJobGluZVwiLCBvcHRpb25zLCBydWxlVGhpY2tuZXNzKTtcbiAgICB2YXIgZGFzaGVzID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwiaGRhc2hsaW5lXCIsIG9wdGlvbnMsIHJ1bGVUaGlja25lc3MpO1xuICAgIHZhciB2TGlzdEVsZW1zID0gW3tcbiAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgZWxlbTogYm9keSxcbiAgICAgIHNoaWZ0OiAwXG4gICAgfV07XG5cbiAgICB3aGlsZSAoaGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBobGluZSA9IGhsaW5lcy5wb3AoKTtcbiAgICAgIHZhciBsaW5lU2hpZnQgPSBobGluZS5wb3MgLSBvZmZzZXQ7XG5cbiAgICAgIGlmIChobGluZS5pc0Rhc2hlZCkge1xuICAgICAgICB2TGlzdEVsZW1zLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGRhc2hlcyxcbiAgICAgICAgICBzaGlmdDogbGluZVNoaWZ0XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdkxpc3RFbGVtcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBsaW5lLFxuICAgICAgICAgIHNoaWZ0OiBsaW5lU2hpZnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogdkxpc3RFbGVtc1xuICAgIH0sIG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKHRhZ1NwYW5zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbYm9keV0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHZhciBlcW5OdW1Db2wgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IHRhZ1NwYW5zXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgZXFuTnVtQ29sID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1widGFnXCJdLCBbZXFuTnVtQ29sXSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChbYm9keSwgZXFuTnVtQ29sXSk7XG4gIH1cbn07XG5cbnZhciBhbGlnbk1hcCA9IHtcbiAgYzogXCJjZW50ZXIgXCIsXG4gIGw6IFwibGVmdCBcIixcbiAgcjogXCJyaWdodCBcIlxufTtcblxudmFyIG1hdGhtbEJ1aWxkZXIkNSA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIHRibCA9IFtdO1xuICB2YXIgZ2x1ZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRkXCIsIFtdLCBbXCJtdHItZ2x1ZVwiXSk7XG4gIHZhciB0YWcgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbXSwgW1wibW1sLWVxbi1udW1cIl0pO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAuYm9keS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBydyA9IGdyb3VwLmJvZHlbaV07XG4gICAgdmFyIHJvdyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBydy5sZW5ndGg7IGorKykge1xuICAgICAgcm93LnB1c2gobmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGRcIiwgW2J1aWxkR3JvdXAocndbal0sIG9wdGlvbnMpXSkpO1xuICAgIH1cblxuICAgIGlmIChncm91cC50YWdzICYmIGdyb3VwLnRhZ3NbaV0pIHtcbiAgICAgIHJvdy51bnNoaWZ0KGdsdWUpO1xuICAgICAgcm93LnB1c2goZ2x1ZSk7XG5cbiAgICAgIGlmIChncm91cC5sZXFubykge1xuICAgICAgICByb3cudW5zaGlmdCh0YWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93LnB1c2godGFnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0YmwucHVzaChuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10clwiLCByb3cpKTtcbiAgfVxuXG4gIHZhciB0YWJsZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRhYmxlXCIsIHRibCk7IC8vIFNldCBjb2x1bW4gYWxpZ25tZW50LCByb3cgc3BhY2luZywgY29sdW1uIHNwYWNpbmcsIGFuZFxuICAvLyBhcnJheSBsaW5lcyBieSBzZXR0aW5nIGF0dHJpYnV0ZXMgb24gdGhlIHRhYmxlIGVsZW1lbnQuXG4gIC8vIFNldCB0aGUgcm93IHNwYWNpbmcuIEluIE1hdGhNTCwgd2Ugc3BlY2lmeSBhIGdhcCBkaXN0YW5jZS5cbiAgLy8gV2UgZG8gbm90IHVzZSByb3dHYXBbXSBiZWNhdXNlIE1hdGhNTCBhdXRvbWF0aWNhbGx5IGluY3JlYXNlc1xuICAvLyBjZWxsIGhlaWdodCB3aXRoIHRoZSBoZWlnaHQvZGVwdGggb2YgdGhlIGVsZW1lbnQgY29udGVudC5cbiAgLy8gTGFUZVggXFxhcnJheXN0cmV0Y2ggbXVsdGlwbGllcyB0aGUgcm93IGJhc2VsaW5lLXRvLWJhc2VsaW5lIGRpc3RhbmNlLlxuICAvLyBXZSBzaW11bGF0ZSB0aGlzIGJ5IGFkZGluZyAoYXJyYXlzdHJldGNoIC0gMSllbSB0byB0aGUgZ2FwLiBUaGlzXG4gIC8vIGRvZXMgYSByZWFzb25hYmxlIGpvYiBvZiBhZGp1c3RpbmcgYXJyYXlzIGNvbnRhaW5pbmcgMSBlbSB0YWxsIGNvbnRlbnQuXG4gIC8vIFRoZSAwLjE2IGFuZCAwLjA5IHZhbHVlcyBhcmUgZm91bmQgZW1waXJpY2FsbHkuIFRoZXkgcHJvZHVjZSBhbiBhcnJheVxuICAvLyBzaW1pbGFyIHRvIExhVGVYIGFuZCBpbiB3aGljaCBjb250ZW50IGRvZXMgbm90IGludGVyZmVyZSB3aXRoIFxcaGxpbmVzLlxuXG4gIHZhciBnYXAgPSBncm91cC5hcnJheXN0cmV0Y2ggPT09IDAuNSA/IDAuMSAvLyB7c21hbGxtYXRyaXh9LCB7c3ViYXJyYXl9XG4gIDogMC4xNiArIGdyb3VwLmFycmF5c3RyZXRjaCAtIDEgKyAoZ3JvdXAuYWRkSm90ID8gMC4wOSA6IDApO1xuICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJyb3dzcGFjaW5nXCIsIG1ha2VFbShnYXApKTsgLy8gTWF0aE1MIHRhYmxlIGxpbmVzIGdvIG9ubHkgYmV0d2VlbiBjZWxscy5cbiAgLy8gVG8gcGxhY2UgYSBsaW5lIG9uIGFuIGVkZ2Ugd2UnbGwgdXNlIDxtZW5jbG9zZT4sIGlmIG5lY2Vzc2FyeS5cblxuICB2YXIgbWVuY2xvc2UgPSBcIlwiO1xuICB2YXIgYWxpZ24gPSBcIlwiO1xuXG4gIGlmIChncm91cC5jb2xzICYmIGdyb3VwLmNvbHMubGVuZ3RoID4gMCkge1xuICAgIC8vIEZpbmQgY29sdW1uIGFsaWdubWVudCwgY29sdW1uIHNwYWNpbmcsIGFuZCAgdmVydGljYWwgbGluZXMuXG4gICAgdmFyIGNvbHMgPSBncm91cC5jb2xzO1xuICAgIHZhciBjb2x1bW5MaW5lcyA9IFwiXCI7XG4gICAgdmFyIHByZXZUeXBlV2FzQWxpZ24gPSBmYWxzZTtcbiAgICB2YXIgaVN0YXJ0ID0gMDtcbiAgICB2YXIgaUVuZCA9IGNvbHMubGVuZ3RoO1xuXG4gICAgaWYgKGNvbHNbMF0udHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgbWVuY2xvc2UgKz0gXCJ0b3AgXCI7XG4gICAgICBpU3RhcnQgPSAxO1xuICAgIH1cblxuICAgIGlmIChjb2xzW2NvbHMubGVuZ3RoIC0gMV0udHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgbWVuY2xvc2UgKz0gXCJib3R0b20gXCI7XG4gICAgICBpRW5kIC09IDE7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSBpU3RhcnQ7IF9pIDwgaUVuZDsgX2krKykge1xuICAgICAgaWYgKGNvbHNbX2ldLnR5cGUgPT09IFwiYWxpZ25cIikge1xuICAgICAgICBhbGlnbiArPSBhbGlnbk1hcFtjb2xzW19pXS5hbGlnbl07XG5cbiAgICAgICAgaWYgKHByZXZUeXBlV2FzQWxpZ24pIHtcbiAgICAgICAgICBjb2x1bW5MaW5lcyArPSBcIm5vbmUgXCI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2VHlwZVdhc0FsaWduID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY29sc1tfaV0udHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgICAvLyBNYXRoTUwgYWNjZXB0cyBvbmx5IHNpbmdsZSBsaW5lcyBiZXR3ZWVuIGNlbGxzLlxuICAgICAgICAvLyBTbyB3ZSByZWFkIG9ubHkgdGhlIGZpcnN0IG9mIGNvbnNlY3V0aXZlIHNlcGFyYXRvcnMuXG4gICAgICAgIGlmIChwcmV2VHlwZVdhc0FsaWduKSB7XG4gICAgICAgICAgY29sdW1uTGluZXMgKz0gY29sc1tfaV0uc2VwYXJhdG9yID09PSBcInxcIiA/IFwic29saWQgXCIgOiBcImRhc2hlZCBcIjtcbiAgICAgICAgICBwcmV2VHlwZVdhc0FsaWduID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5hbGlnblwiLCBhbGlnbi50cmltKCkpO1xuXG4gICAgaWYgKC9bc2RdLy50ZXN0KGNvbHVtbkxpbmVzKSkge1xuICAgICAgdGFibGUuc2V0QXR0cmlidXRlKFwiY29sdW1ubGluZXNcIiwgY29sdW1uTGluZXMudHJpbSgpKTtcbiAgICB9XG4gIH0gLy8gU2V0IGNvbHVtbiBzcGFjaW5nLlxuXG5cbiAgaWYgKGdyb3VwLmNvbFNlcGFyYXRpb25UeXBlID09PSBcImFsaWduXCIpIHtcbiAgICB2YXIgX2NvbHMgPSBncm91cC5jb2xzIHx8IFtdO1xuXG4gICAgdmFyIHNwYWNpbmcgPSBcIlwiO1xuXG4gICAgZm9yICh2YXIgX2kyID0gMTsgX2kyIDwgX2NvbHMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgc3BhY2luZyArPSBfaTIgJSAyID8gXCIwZW0gXCIgOiBcIjFlbSBcIjtcbiAgICB9XG5cbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIHNwYWNpbmcudHJpbSgpKTtcbiAgfSBlbHNlIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJhbGlnbmF0XCIgfHwgZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiZ2F0aGVyXCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMGVtXCIpO1xuICB9IGVsc2UgaWYgKGdyb3VwLmNvbFNlcGFyYXRpb25UeXBlID09PSBcInNtYWxsXCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMC4yNzc4ZW1cIik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiQ0RcIikge1xuICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcImNvbHVtbnNwYWNpbmdcIiwgXCIwLjVlbVwiKTtcbiAgfSBlbHNlIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMWVtXCIpO1xuICB9IC8vIEFkZHJlc3MgXFxobGluZSBhbmQgXFxoZGFzaGxpbmVcblxuXG4gIHZhciByb3dMaW5lcyA9IFwiXCI7XG4gIHZhciBobGluZXMgPSBncm91cC5oTGluZXNCZWZvcmVSb3c7XG4gIG1lbmNsb3NlICs9IGhsaW5lc1swXS5sZW5ndGggPiAwID8gXCJsZWZ0IFwiIDogXCJcIjtcbiAgbWVuY2xvc2UgKz0gaGxpbmVzW2hsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggPiAwID8gXCJyaWdodCBcIiA6IFwiXCI7XG5cbiAgZm9yICh2YXIgX2kzID0gMTsgX2kzIDwgaGxpbmVzLmxlbmd0aCAtIDE7IF9pMysrKSB7XG4gICAgcm93TGluZXMgKz0gaGxpbmVzW19pM10ubGVuZ3RoID09PSAwID8gXCJub25lIFwiIC8vIE1hdGhNTCBhY2NlcHRzIG9ubHkgYSBzaW5nbGUgbGluZSBiZXR3ZWVuIHJvd3MuIFJlYWQgb25lIGVsZW1lbnQuXG4gICAgOiBobGluZXNbX2kzXVswXSA/IFwiZGFzaGVkIFwiIDogXCJzb2xpZCBcIjtcbiAgfVxuXG4gIGlmICgvW3NkXS8udGVzdChyb3dMaW5lcykpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJyb3dsaW5lc1wiLCByb3dMaW5lcy50cmltKCkpO1xuICB9XG5cbiAgaWYgKG1lbmNsb3NlICE9PSBcIlwiKSB7XG4gICAgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1lbmNsb3NlXCIsIFt0YWJsZV0pO1xuICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIG1lbmNsb3NlLnRyaW0oKSk7XG4gIH1cblxuICBpZiAoZ3JvdXAuYXJyYXlzdHJldGNoICYmIGdyb3VwLmFycmF5c3RyZXRjaCA8IDEpIHtcbiAgICAvLyBBIHNtYWxsIGFycmF5LiBXcmFwIGluIHNjcmlwdHN0eWxlIHNvIHJvdyBnYXAgaXMgbm90IHRvbyBsYXJnZS5cbiAgICB0YWJsZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIFt0YWJsZV0pO1xuICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcInNjcmlwdGxldmVsXCIsIFwiMVwiKTtcbiAgfVxuXG4gIHJldHVybiB0YWJsZTtcbn07IC8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBhbGlnbiwgYWxpZ24qLCBhbGlnbmVkLCBhbGlnbmF0LCBhbGlnbmF0KiwgYWxpZ25lZGF0LlxuXG5cbnZhciBhbGlnbmVkSGFuZGxlciA9IGZ1bmN0aW9uIGFsaWduZWRIYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgaWYgKGNvbnRleHQuZW52TmFtZS5pbmRleE9mKFwiZWRcIikgPT09IC0xKSB7XG4gICAgdmFsaWRhdGVBbXNFbnZpcm9ubWVudENvbnRleHQoY29udGV4dCk7XG4gIH1cblxuICB2YXIgY29scyA9IFtdO1xuICB2YXIgc2VwYXJhdGlvblR5cGUgPSBjb250ZXh0LmVudk5hbWUuaW5kZXhPZihcImF0XCIpID4gLTEgPyBcImFsaWduYXRcIiA6IFwiYWxpZ25cIjtcbiAgdmFyIGlzU3BsaXQgPSBjb250ZXh0LmVudk5hbWUgPT09IFwic3BsaXRcIjtcbiAgdmFyIHJlcyA9IHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHtcbiAgICBjb2xzLFxuICAgIGFkZEpvdDogdHJ1ZSxcbiAgICBhdXRvVGFnOiBpc1NwbGl0ID8gdW5kZWZpbmVkIDogZ2V0QXV0b1RhZyhjb250ZXh0LmVudk5hbWUpLFxuICAgIGVtcHR5U2luZ2xlUm93OiB0cnVlLFxuICAgIGNvbFNlcGFyYXRpb25UeXBlOiBzZXBhcmF0aW9uVHlwZSxcbiAgICBtYXhOdW1Db2xzOiBpc1NwbGl0ID8gMiA6IHVuZGVmaW5lZCxcbiAgICBsZXFubzogY29udGV4dC5wYXJzZXIuc2V0dGluZ3MubGVxbm9cbiAgfSwgXCJkaXNwbGF5XCIpOyAvLyBEZXRlcm1pbmluZyBudW1iZXIgb2YgY29sdW1ucy5cbiAgLy8gMS4gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGdpdmVuLCB3ZSB1c2UgaXQgYXMgYSBudW1iZXIgb2YgY29sdW1ucyxcbiAgLy8gICAgYW5kIG1ha2VzIHN1cmUgdGhhdCBlYWNoIHJvdyBkb2Vzbid0IGV4Y2VlZCB0aGF0IG51bWJlci5cbiAgLy8gMi4gT3RoZXJ3aXNlLCBqdXN0IGNvdW50IG51bWJlciBvZiBjb2x1bW5zID0gbWF4aW11bSBudW1iZXJcbiAgLy8gICAgb2YgY2VsbHMgaW4gZWFjaCByb3cgKFwiYWxpZ25lZFwiIG1vZGUgLS0gaXNBbGlnbmVkIHdpbGwgYmUgdHJ1ZSkuXG4gIC8vXG4gIC8vIEF0IHRoZSBzYW1lIHRpbWUsIHByZXBlbmQgZW1wdHkgZ3JvdXAge30gYXQgYmVnaW5uaW5nIG9mIGV2ZXJ5IHNlY29uZFxuICAvLyBjZWxsIGluIGVhY2ggcm93IChzdGFydGluZyB3aXRoIHNlY29uZCBjZWxsKSBzbyB0aGF0IG9wZXJhdG9ycyBiZWNvbWVcbiAgLy8gYmluYXJ5LiAgVGhpcyBiZWhhdmlvciBpcyBpbXBsZW1lbnRlZCBpbiBhbXNtYXRoJ3MgXFxzdGFydEBhbGlnbmVkLlxuXG4gIHZhciBudW1NYXRocztcbiAgdmFyIG51bUNvbHMgPSAwO1xuICB2YXIgZW1wdHlHcm91cCA9IHtcbiAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgbW9kZTogY29udGV4dC5tb2RlLFxuICAgIGJvZHk6IFtdXG4gIH07XG5cbiAgaWYgKGFyZ3NbMF0gJiYgYXJnc1swXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICB2YXIgYXJnMCA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3NbMF0uYm9keS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRleHRvcmQgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLmJvZHlbaV0sIFwidGV4dG9yZFwiKTtcbiAgICAgIGFyZzAgKz0gdGV4dG9yZC50ZXh0O1xuICAgIH1cblxuICAgIG51bU1hdGhzID0gTnVtYmVyKGFyZzApO1xuICAgIG51bUNvbHMgPSBudW1NYXRocyAqIDI7XG4gIH1cblxuICB2YXIgaXNBbGlnbmVkID0gIW51bUNvbHM7XG4gIHJlcy5ib2R5LmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xuICAgIGZvciAodmFyIF9pNCA9IDE7IF9pNCA8IHJvdy5sZW5ndGg7IF9pNCArPSAyKSB7XG4gICAgICAvLyBNb2RpZnkgb3JkZ3JvdXAgbm9kZSB3aXRoaW4gc3R5bGluZyBub2RlXG4gICAgICB2YXIgc3R5bGluZyA9IGFzc2VydE5vZGVUeXBlKHJvd1tfaTRdLCBcInN0eWxpbmdcIik7XG4gICAgICB2YXIgb3JkZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShzdHlsaW5nLmJvZHlbMF0sIFwib3JkZ3JvdXBcIik7XG4gICAgICBvcmRncm91cC5ib2R5LnVuc2hpZnQoZW1wdHlHcm91cCk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0FsaWduZWQpIHtcbiAgICAgIC8vIENhc2UgMVxuICAgICAgdmFyIGN1ck1hdGhzID0gcm93Lmxlbmd0aCAvIDI7XG5cbiAgICAgIGlmIChudW1NYXRocyA8IGN1ck1hdGhzKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVG9vIG1hbnkgbWF0aCBpbiBhIHJvdzogXCIgKyAoXCJleHBlY3RlZCBcIiArIG51bU1hdGhzICsgXCIsIGJ1dCBnb3QgXCIgKyBjdXJNYXRocyksIHJvd1swXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChudW1Db2xzIDwgcm93Lmxlbmd0aCkge1xuICAgICAgLy8gQ2FzZSAyXG4gICAgICBudW1Db2xzID0gcm93Lmxlbmd0aDtcbiAgICB9XG4gIH0pOyAvLyBBZGp1c3RpbmcgYWxpZ25tZW50LlxuICAvLyBJbiBhbGlnbmVkIG1vZGUsIHdlIGFkZCBvbmUgXFxxcXVhZCBiZXR3ZWVuIGNvbHVtbnM7XG4gIC8vIG90aGVyd2lzZSB3ZSBhZGQgbm90aGluZy5cblxuICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBudW1Db2xzOyArK19pNSkge1xuICAgIHZhciBhbGlnbiA9IFwiclwiO1xuICAgIHZhciBwcmVnYXAgPSAwO1xuXG4gICAgaWYgKF9pNSAlIDIgPT09IDEpIHtcbiAgICAgIGFsaWduID0gXCJsXCI7XG4gICAgfSBlbHNlIGlmIChfaTUgPiAwICYmIGlzQWxpZ25lZCkge1xuICAgICAgLy8gXCJhbGlnbmVkXCIgbW9kZS5cbiAgICAgIHByZWdhcCA9IDE7IC8vIGFkZCBvbmUgXFxxdWFkXG4gICAgfVxuXG4gICAgY29sc1tfaTVdID0ge1xuICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgYWxpZ246IGFsaWduLFxuICAgICAgcHJlZ2FwOiBwcmVnYXAsXG4gICAgICBwb3N0Z2FwOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJlcy5jb2xTZXBhcmF0aW9uVHlwZSA9IGlzQWxpZ25lZCA/IFwiYWxpZ25cIiA6IFwiYWxpZ25hdFwiO1xuICByZXR1cm4gcmVzO1xufTsgLy8gQXJyYXlzIGFyZSBwYXJ0IG9mIExhVGVYLCBkZWZpbmVkIGluIGx0dGFiLmR0eCBzbyBpdHMgZG9jdW1lbnRhdGlvblxuLy8gaXMgcGFydCBvZiB0aGUgc291cmNlMmUucGRmIGZpbGUgb2YgTGFUZVgyZSBzb3VyY2UgZG9jdW1lbnRhdGlvbi5cbi8vIHtkYXJyYXl9IGlzIGFuIHthcnJheX0gZW52aXJvbm1lbnQgd2hlcmUgY2VsbHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZSxcbi8vIGFzIGRlZmluZWQgaW4gbmNjbWF0aC5zdHkuXG5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJhcnJheVwiLCBcImRhcnJheVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgLy8gU2luY2Ugbm8gdHlwZXMgYXJlIHNwZWNpZmllZCBhYm92ZSwgdGhlIHR3byBwb3NzaWJpbGl0aWVzIGFyZVxuICAgIC8vIC0gVGhlIGFyZ3VtZW50IGlzIHdyYXBwZWQgaW4ge30gb3IgW10sIGluIHdoaWNoIGNhc2UgUGFyc2VyJ3NcbiAgICAvLyAgIHBhcnNlR3JvdXAoKSByZXR1cm5zIGFuIFwib3JkZ3JvdXBcIiB3cmFwcGluZyBzb21lIHN5bWJvbCBub2RlLlxuICAgIC8vIC0gVGhlIGFyZ3VtZW50IGlzIGEgYmFyZSBzeW1ib2wgbm9kZS5cbiAgICB2YXIgc3ltTm9kZSA9IGNoZWNrU3ltYm9sTm9kZVR5cGUoYXJnc1swXSk7XG4gICAgdmFyIGNvbGFsaWduID0gc3ltTm9kZSA/IFthcmdzWzBdXSA6IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwib3JkZ3JvdXBcIikuYm9keTtcbiAgICB2YXIgY29scyA9IGNvbGFsaWduLm1hcChmdW5jdGlvbiAobmRlKSB7XG4gICAgICB2YXIgbm9kZSA9IGFzc2VydFN5bWJvbE5vZGVUeXBlKG5kZSk7XG4gICAgICB2YXIgY2EgPSBub2RlLnRleHQ7XG5cbiAgICAgIGlmIChcImxjclwiLmluZGV4T2YoY2EpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgICBhbGlnbjogY2FcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoY2EgPT09IFwifFwiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJzZXBhcmF0b3JcIixcbiAgICAgICAgICBzZXBhcmF0b3I6IFwifFwiXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGNhID09PSBcIjpcIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgc2VwYXJhdG9yOiBcIjpcIlxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVua25vd24gY29sdW1uIGFsaWdubWVudDogXCIgKyBjYSwgbmRlKTtcbiAgICB9KTtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgY29scyxcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IHRydWUsXG4gICAgICAvLyBcXEBwcmVhbWJsZSBpbiBsdHRhYi5kdHhcbiAgICAgIG1heE51bUNvbHM6IGNvbHMubGVuZ3RoXG4gICAgfTtcbiAgICByZXR1cm4gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcmVzLCBkQ2VsbFN0eWxlKGNvbnRleHQuZW52TmFtZSkpO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ2LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDVcbn0pOyAvLyBUaGUgbWF0cml4IGVudmlyb25tZW50cyBvZiBhbXNtYXRoIGJ1aWxkcyBvbiB0aGUgYXJyYXkgZW52aXJvbm1lbnRcbi8vIG9mIExhVGVYLCB3aGljaCBpcyBkaXNjdXNzZWQgYWJvdmUuXG4vLyBUaGUgbWF0aHRvb2xzIHBhY2thZ2UgYWRkcyBzdGFycmVkIHZlcnNpb25zIG9mIHRoZSBzYW1lIGVudmlyb25tZW50cy5cbi8vIFRoZXNlIGhhdmUgYW4gb3B0aW9uYWwgYXJndW1lbnQgdG8gY2hvb3NlIGxlZnR8Y2VudGVyfHJpZ2h0IGp1c3RpZmljYXRpb24uXG5cbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wibWF0cml4XCIsIFwicG1hdHJpeFwiLCBcImJtYXRyaXhcIiwgXCJCbWF0cml4XCIsIFwidm1hdHJpeFwiLCBcIlZtYXRyaXhcIiwgXCJtYXRyaXgqXCIsIFwicG1hdHJpeCpcIiwgXCJibWF0cml4KlwiLCBcIkJtYXRyaXgqXCIsIFwidm1hdHJpeCpcIiwgXCJWbWF0cml4KlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0KSB7XG4gICAgdmFyIGRlbGltaXRlcnMgPSB7XG4gICAgICBcIm1hdHJpeFwiOiBudWxsLFxuICAgICAgXCJwbWF0cml4XCI6IFtcIihcIiwgXCIpXCJdLFxuICAgICAgXCJibWF0cml4XCI6IFtcIltcIiwgXCJdXCJdLFxuICAgICAgXCJCbWF0cml4XCI6IFtcIlxcXFx7XCIsIFwiXFxcXH1cIl0sXG4gICAgICBcInZtYXRyaXhcIjogW1wifFwiLCBcInxcIl0sXG4gICAgICBcIlZtYXRyaXhcIjogW1wiXFxcXFZlcnRcIiwgXCJcXFxcVmVydFwiXVxuICAgIH1bY29udGV4dC5lbnZOYW1lLnJlcGxhY2UoXCIqXCIsIFwiXCIpXTsgLy8gXFxoc2tpcCAtXFxhcnJheWNvbHNlcCBpbiBhbXNtYXRoXG5cbiAgICB2YXIgY29sQWxpZ24gPSBcImNcIjtcbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGZhbHNlLFxuICAgICAgY29sczogW3tcbiAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICBhbGlnbjogY29sQWxpZ25cbiAgICAgIH1dXG4gICAgfTtcblxuICAgIGlmIChjb250ZXh0LmVudk5hbWUuY2hhckF0KGNvbnRleHQuZW52TmFtZS5sZW5ndGggLSAxKSA9PT0gXCIqXCIpIHtcbiAgICAgIC8vIEl0J3Mgb25lIG9mIHRoZSBtYXRodG9vbHMgc3RhcnJlZCBmdW5jdGlvbnMuXG4gICAgICAvLyBQYXJzZSB0aGUgb3B0aW9uYWwgYWxpZ25tZW50IGFyZ3VtZW50LlxuICAgICAgdmFyIHBhcnNlciA9IGNvbnRleHQucGFyc2VyO1xuICAgICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcblxuICAgICAgaWYgKHBhcnNlci5mZXRjaCgpLnRleHQgPT09IFwiW1wiKSB7XG4gICAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgICAgIHBhcnNlci5jb25zdW1lU3BhY2VzKCk7XG4gICAgICAgIGNvbEFsaWduID0gcGFyc2VyLmZldGNoKCkudGV4dDtcblxuICAgICAgICBpZiAoXCJsY3JcIi5pbmRleE9mKGNvbEFsaWduKSA9PT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGwgb3IgYyBvciByXCIsIHBhcnNlci5uZXh0VG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VyLmNvbnN1bWUoKTtcbiAgICAgICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICAgICAgcGFyc2VyLmV4cGVjdChcIl1cIik7XG4gICAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgICAgIHBheWxvYWQuY29scyA9IFt7XG4gICAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICAgIGFsaWduOiBjb2xBbGlnblxuICAgICAgICB9XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTsgLy8gUG9wdWxhdGUgY29scyB3aXRoIHRoZSBjb3JyZWN0IG51bWJlciBvZiBjb2x1bW4gYWxpZ25tZW50IHNwZWNzLlxuXG4gICAgdmFyIG51bUNvbHMgPSBNYXRoLm1heCgwLCAuLi5yZXMuYm9keS5tYXAocm93ID0+IHJvdy5sZW5ndGgpKTtcbiAgICByZXMuY29scyA9IG5ldyBBcnJheShudW1Db2xzKS5maWxsKHtcbiAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgIGFsaWduOiBjb2xBbGlnblxuICAgIH0pO1xuICAgIHJldHVybiBkZWxpbWl0ZXJzID8ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHRcIixcbiAgICAgIG1vZGU6IGNvbnRleHQubW9kZSxcbiAgICAgIGJvZHk6IFtyZXNdLFxuICAgICAgbGVmdDogZGVsaW1pdGVyc1swXSxcbiAgICAgIHJpZ2h0OiBkZWxpbWl0ZXJzWzFdLFxuICAgICAgcmlnaHRDb2xvcjogdW5kZWZpbmVkIC8vIFxccmlnaHQgdW5pbmZsdWVuY2VkIGJ5IFxcY29sb3IgaW4gYXJyYXlcblxuICAgIH0gOiByZXM7XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7XG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcInNtYWxsbWF0cml4XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQpIHtcbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGFycmF5c3RyZXRjaDogMC41XG4gICAgfTtcbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgXCJzY3JpcHRcIik7XG4gICAgcmVzLmNvbFNlcGFyYXRpb25UeXBlID0gXCJzbWFsbFwiO1xuICAgIHJldHVybiByZXM7XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7XG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcInN1YmFycmF5XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAvLyBQYXJzaW5nIG9mIHtzdWJhcnJheX0gaXMgc2ltaWxhciB0byB7YXJyYXl9XG4gICAgdmFyIHN5bU5vZGUgPSBjaGVja1N5bWJvbE5vZGVUeXBlKGFyZ3NbMF0pO1xuICAgIHZhciBjb2xhbGlnbiA9IHN5bU5vZGUgPyBbYXJnc1swXV0gOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpLmJvZHk7XG4gICAgdmFyIGNvbHMgPSBjb2xhbGlnbi5tYXAoZnVuY3Rpb24gKG5kZSkge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnRTeW1ib2xOb2RlVHlwZShuZGUpO1xuICAgICAgdmFyIGNhID0gbm9kZS50ZXh0OyAvLyB7c3ViYXJyYXl9IG9ubHkgcmVjb2duaXplcyBcImxcIiAmIFwiY1wiXG5cbiAgICAgIGlmIChcImxjXCIuaW5kZXhPZihjYSkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICAgIGFsaWduOiBjYVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVua25vd24gY29sdW1uIGFsaWdubWVudDogXCIgKyBjYSwgbmRlKTtcbiAgICB9KTtcblxuICAgIGlmIChjb2xzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW5cIik7XG4gICAgfVxuXG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIGNvbHMsXG4gICAgICBoc2tpcEJlZm9yZUFuZEFmdGVyOiBmYWxzZSxcbiAgICAgIGFycmF5c3RyZXRjaDogMC41XG4gICAgfTtcbiAgICByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCByZXMsIFwic2NyaXB0XCIpO1xuXG4gICAgaWYgKHJlcy5ib2R5Lmxlbmd0aCA+IDAgJiYgcmVzLmJvZHlbMF0ubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJ7c3ViYXJyYXl9IGNhbiBjb250YWluIG9ubHkgb25lIGNvbHVtblwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ2LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDVcbn0pOyAvLyBBIGNhc2VzIGVudmlyb25tZW50IChpbiBhbXNtYXRoLnN0eSkgaXMgYWxtb3N0IGVxdWl2YWxlbnQgdG9cbi8vIFxcZGVmXFxhcnJheXN0cmV0Y2h7MS4yfSVcbi8vIFxcbGVmdFxce1xcYmVnaW57YXJyYXl9e0B7fWxAe1xccXVhZH1sQHt9fSDigKYgXFxlbmR7YXJyYXl9XFxyaWdodC5cbi8vIHtkY2FzZXN9IGlzIGEge2Nhc2VzfSBlbnZpcm9ubWVudCB3aGVyZSBjZWxscyBhcmUgc2V0IGluIFxcZGlzcGxheXN0eWxlLFxuLy8gYXMgZGVmaW5lZCBpbiBtYXRodG9vbHMuc3R5LlxuLy8ge3JjYXNlc30gaXMgYW5vdGhlciBtYXRodG9vbHMgZW52aXJvbm1lbnQuIEl0J3MgYnJhY2UgaXMgb24gdGhlIHJpZ2h0IHNpZGUuXG5cbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiY2FzZXNcIiwgXCJkY2FzZXNcIiwgXCJyY2FzZXNcIiwgXCJkcmNhc2VzXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQpIHtcbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGFycmF5c3RyZXRjaDogMS4yLFxuICAgICAgY29sczogW3tcbiAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICBhbGlnbjogXCJsXCIsXG4gICAgICAgIHByZWdhcDogMCxcbiAgICAgICAgLy8gVE9ETyhrZXZpbmIpIGdldCB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgICAgLy8gRm9yIG5vdyB3ZSB1c2UgdGhlIG1ldHJpY3MgZm9yIFRFWFQgc3R5bGUgd2hpY2ggaXMgd2hhdCB3ZSB3ZXJlXG4gICAgICAgIC8vIGRvaW5nIGJlZm9yZS4gIEJlZm9yZSBhdHRlbXB0aW5nIHRvIGdldCB0aGUgY3VycmVudCBzdHlsZSB3ZVxuICAgICAgICAvLyBzaG91bGQgbG9vayBhdCBUZVgncyBiZWhhdmlvciBlc3BlY2lhbGx5IGZvciBcXG92ZXIgYW5kIG1hdHJpY2VzLlxuICAgICAgICBwb3N0Z2FwOiAxLjBcbiAgICAgICAgLyogMWVtIHF1YWQgKi9cblxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICAgIGFsaWduOiBcImxcIixcbiAgICAgICAgcHJlZ2FwOiAwLFxuICAgICAgICBwb3N0Z2FwOiAwXG4gICAgICB9XVxuICAgIH07XG4gICAgdmFyIHJlcyA9IHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHBheWxvYWQsIGRDZWxsU3R5bGUoY29udGV4dC5lbnZOYW1lKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibGVmdHJpZ2h0XCIsXG4gICAgICBtb2RlOiBjb250ZXh0Lm1vZGUsXG4gICAgICBib2R5OiBbcmVzXSxcbiAgICAgIGxlZnQ6IGNvbnRleHQuZW52TmFtZS5pbmRleE9mKFwiclwiKSA+IC0xID8gXCIuXCIgOiBcIlxcXFx7XCIsXG4gICAgICByaWdodDogY29udGV4dC5lbnZOYW1lLmluZGV4T2YoXCJyXCIpID4gLTEgPyBcIlxcXFx9XCIgOiBcIi5cIixcbiAgICAgIHJpZ2h0Q29sb3I6IHVuZGVmaW5lZFxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7IC8vIEluIHRoZSBhbGlnbiBlbnZpcm9ubWVudCwgb25lIHVzZXMgYW1wZXJzYW5kcywgJiwgdG8gc3BlY2lmeSBudW1iZXIgb2Zcbi8vIGNvbHVtbnMgaW4gZWFjaCByb3csIGFuZCB0byBsb2NhdGUgc3BhY2luZyBiZXR3ZWVuIGVhY2ggY29sdW1uLlxuLy8gYWxpZ24gZ2V0cyBhdXRvbWF0aWMgbnVtYmVyaW5nLiBhbGlnbiogYW5kIGFsaWduZWQgZG8gbm90LlxuLy8gVGhlIGFsaWduZWRhdCBlbnZpcm9ubWVudCBjYW4gYmUgdXNlZCBpbiBtYXRoIG1vZGUuXG4vLyBOb3RlIHRoYXQgd2UgYXNzdW1lIFxcbm9tYWxsaW5lc2tpcGxpbWl0IHRvIGJlIHplcm8sXG4vLyBzbyB0aGF0IFxcc3RydXRAIGlzIHRoZSBzYW1lIGFzIFxcc3RydXQuXG5cbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiYWxpZ25cIiwgXCJhbGlnbipcIiwgXCJhbGlnbmVkXCIsIFwic3BsaXRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBhbGlnbmVkSGFuZGxlcixcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7IC8vIEEgZ2F0aGVyZWQgZW52aXJvbm1lbnQgaXMgbGlrZSBhbiBhcnJheSBlbnZpcm9ubWVudCB3aXRoIG9uZSBjZW50ZXJlZFxuLy8gY29sdW1uLCBidXQgd2hlcmUgcm93cyBhcmUgY29uc2lkZXJlZCBsaW5lcyBzbyBnZXQgXFxqb3QgbGluZSBzcGFjaW5nXG4vLyBhbmQgY29udGVudHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZS5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJnYXRoZXJlZFwiLCBcImdhdGhlclwiLCBcImdhdGhlcipcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCkge1xuICAgIGlmICh1dGlscy5jb250YWlucyhbXCJnYXRoZXJcIiwgXCJnYXRoZXIqXCJdLCBjb250ZXh0LmVudk5hbWUpKSB7XG4gICAgICB2YWxpZGF0ZUFtc0Vudmlyb25tZW50Q29udGV4dChjb250ZXh0KTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0ge1xuICAgICAgY29sczogW3tcbiAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICBhbGlnbjogXCJjXCJcbiAgICAgIH1dLFxuICAgICAgYWRkSm90OiB0cnVlLFxuICAgICAgY29sU2VwYXJhdGlvblR5cGU6IFwiZ2F0aGVyXCIsXG4gICAgICBhdXRvVGFnOiBnZXRBdXRvVGFnKGNvbnRleHQuZW52TmFtZSksXG4gICAgICBlbXB0eVNpbmdsZVJvdzogdHJ1ZSxcbiAgICAgIGxlcW5vOiBjb250ZXh0LnBhcnNlci5zZXR0aW5ncy5sZXFub1xuICAgIH07XG4gICAgcmV0dXJuIHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgXCJkaXNwbGF5XCIpO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ2LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDVcbn0pOyAvLyBhbGlnbmF0IGVudmlyb25tZW50IGlzIGxpa2UgYW4gYWxpZ24gZW52aXJvbm1lbnQsIGJ1dCBvbmUgbXVzdCBleHBsaWNpdGx5XG4vLyBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgaW4gZWFjaCByb3csIGFuZCBjYW4gYWRqdXN0IHNwYWNpbmcgYmV0d2VlblxuLy8gZWFjaCBjb2x1bW5zLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImFsaWduYXRcIiwgXCJhbGlnbmF0KlwiLCBcImFsaWduZWRhdFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGFsaWduZWRIYW5kbGVyLFxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNixcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ1XG59KTtcbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiZXF1YXRpb25cIiwgXCJlcXVhdGlvbipcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhbGlkYXRlQW1zRW52aXJvbm1lbnRDb250ZXh0KGNvbnRleHQpO1xuICAgIHZhciByZXMgPSB7XG4gICAgICBhdXRvVGFnOiBnZXRBdXRvVGFnKGNvbnRleHQuZW52TmFtZSksXG4gICAgICBlbXB0eVNpbmdsZVJvdzogdHJ1ZSxcbiAgICAgIHNpbmdsZVJvdzogdHJ1ZSxcbiAgICAgIG1heE51bUNvbHM6IDEsXG4gICAgICBsZXFubzogY29udGV4dC5wYXJzZXIuc2V0dGluZ3MubGVxbm9cbiAgICB9O1xuICAgIHJldHVybiBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCByZXMsIFwiZGlzcGxheVwiKTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNixcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ1XG59KTtcbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiQ0RcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhbGlkYXRlQW1zRW52aXJvbm1lbnRDb250ZXh0KGNvbnRleHQpO1xuICAgIHJldHVybiBwYXJzZUNEKGNvbnRleHQucGFyc2VyKTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNixcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ1XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXG5vbnVtYmVyXCIsIFwiXFxcXGdkZWZcXFxcQGVxbnN3ezB9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbm90YWdcIiwgXCJcXFxcbm9udW1iZXJcIik7IC8vIENhdGNoIFxcaGxpbmUgb3V0c2lkZSBhcnJheSBlbnZpcm9ubWVudFxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dFwiLFxuICAvLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoaXMgaXMuXG4gIG5hbWVzOiBbXCJcXFxcaGxpbmVcIiwgXCJcXFxcaGRhc2hsaW5lXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBhbGxvd2VkSW5NYXRoOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoY29udGV4dC5mdW5jTmFtZSArIFwiIHZhbGlkIG9ubHkgd2l0aGluIGFycmF5IGVudmlyb25tZW50XCIpO1xuICB9XG5cbn0pO1xuXG52YXIgZW52aXJvbm1lbnRzID0gX2Vudmlyb25tZW50cztcblxuLy8gZGVmaW5lRW52aXJvbm1lbnQgZGVmaW5pdGlvbnMuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJlbnZpcm9ubWVudFwiLFxuICBuYW1lczogW1wiXFxcXGJlZ2luXCIsIFwiXFxcXGVuZFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJ0ZXh0XCJdXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIG5hbWVHcm91cCA9IGFyZ3NbMF07XG5cbiAgICBpZiAobmFtZUdyb3VwLnR5cGUgIT09IFwib3JkZ3JvdXBcIikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIGVudmlyb25tZW50IG5hbWVcIiwgbmFtZUdyb3VwKTtcbiAgICB9XG5cbiAgICB2YXIgZW52TmFtZSA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVHcm91cC5ib2R5Lmxlbmd0aDsgKytpKSB7XG4gICAgICBlbnZOYW1lICs9IGFzc2VydE5vZGVUeXBlKG5hbWVHcm91cC5ib2R5W2ldLCBcInRleHRvcmRcIikudGV4dDtcbiAgICB9XG5cbiAgICBpZiAoZnVuY05hbWUgPT09IFwiXFxcXGJlZ2luXCIpIHtcbiAgICAgIC8vIGJlZ2luLi4uZW5kIGlzIHNpbWlsYXIgdG8gbGVmdC4uLnJpZ2h0XG4gICAgICBpZiAoIWVudmlyb25tZW50cy5oYXNPd25Qcm9wZXJ0eShlbnZOYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIk5vIHN1Y2ggZW52aXJvbm1lbnQ6IFwiICsgZW52TmFtZSwgbmFtZUdyb3VwKTtcbiAgICAgIH0gLy8gQnVpbGQgdGhlIGVudmlyb25tZW50IG9iamVjdC4gQXJndW1lbnRzIGFuZCBvdGhlciBpbmZvcm1hdGlvbiB3aWxsXG4gICAgICAvLyBiZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgYmVnaW4gYW5kIGVuZCBtZXRob2RzIHVzaW5nIHByb3BlcnRpZXMuXG5cblxuICAgICAgdmFyIGVudiA9IGVudmlyb25tZW50c1tlbnZOYW1lXTtcbiAgICAgIHZhciB7XG4gICAgICAgIGFyZ3M6IF9hcmdzLFxuICAgICAgICBvcHRBcmdzXG4gICAgICB9ID0gcGFyc2VyLnBhcnNlQXJndW1lbnRzKFwiXFxcXGJlZ2lue1wiICsgZW52TmFtZSArIFwifVwiLCBlbnYpO1xuICAgICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgICBlbnZOYW1lLFxuICAgICAgICBwYXJzZXJcbiAgICAgIH07XG4gICAgICB2YXIgcmVzdWx0ID0gZW52LmhhbmRsZXIoY29udGV4dCwgX2FyZ3MsIG9wdEFyZ3MpO1xuICAgICAgcGFyc2VyLmV4cGVjdChcIlxcXFxlbmRcIiwgZmFsc2UpO1xuICAgICAgdmFyIGVuZE5hbWVUb2tlbiA9IHBhcnNlci5uZXh0VG9rZW47XG4gICAgICB2YXIgZW5kID0gYXNzZXJ0Tm9kZVR5cGUocGFyc2VyLnBhcnNlRnVuY3Rpb24oKSwgXCJlbnZpcm9ubWVudFwiKTtcblxuICAgICAgaWYgKGVuZC5uYW1lICE9PSBlbnZOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTWlzbWF0Y2g6IFxcXFxiZWdpbntcIiArIGVudk5hbWUgKyBcIn0gbWF0Y2hlZCBieSBcXFxcZW5ke1wiICsgZW5kLm5hbWUgKyBcIn1cIiwgZW5kTmFtZVRva2VuKTtcbiAgICAgIH0gLy8gJEZsb3dGaXhNZSwgXCJlbnZpcm9ubWVudFwiIGhhbmRsZXIgcmV0dXJucyBhbiBlbnZpcm9ubWVudCBQYXJzZU5vZGVcblxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVudmlyb25tZW50XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG5hbWU6IGVudk5hbWUsXG4gICAgICBuYW1lR3JvdXBcbiAgICB9O1xuICB9XG5cbn0pO1xuXG4vLyBUT0RPKGtldmluYik6IGltcGxlbWVudCBcXFxcc2wgYW5kIFxcXFxzY1xuXG52YXIgaHRtbEJ1aWxkZXIkNSA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgZm9udCA9IGdyb3VwLmZvbnQ7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy53aXRoRm9udChmb250KTtcbiAgcmV0dXJuIGJ1aWxkR3JvdXAkMShncm91cC5ib2R5LCBuZXdPcHRpb25zKTtcbn07XG5cbnZhciBtYXRobWxCdWlsZGVyJDQgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250O1xuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMud2l0aEZvbnQoZm9udCk7XG4gIHJldHVybiBidWlsZEdyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xufTtcblxudmFyIGZvbnRBbGlhc2VzID0ge1xuICBcIlxcXFxCYmJcIjogXCJcXFxcbWF0aGJiXCIsXG4gIFwiXFxcXGJvbGRcIjogXCJcXFxcbWF0aGJmXCIsXG4gIFwiXFxcXGZyYWtcIjogXCJcXFxcbWF0aGZyYWtcIixcbiAgXCJcXFxcYm1cIjogXCJcXFxcYm9sZHN5bWJvbFwiXG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImZvbnRcIixcbiAgbmFtZXM6IFsvLyBzdHlsZXMsIGV4Y2VwdCBcXGJvbGRzeW1ib2wgZGVmaW5lZCBiZWxvd1xuICBcIlxcXFxtYXRocm1cIiwgXCJcXFxcbWF0aGl0XCIsIFwiXFxcXG1hdGhiZlwiLCBcIlxcXFxtYXRobm9ybWFsXCIsIC8vIGZhbWlsaWVzXG4gIFwiXFxcXG1hdGhiYlwiLCBcIlxcXFxtYXRoY2FsXCIsIFwiXFxcXG1hdGhmcmFrXCIsIFwiXFxcXG1hdGhzY3JcIiwgXCJcXFxcbWF0aHNmXCIsIFwiXFxcXG1hdGh0dFwiLCAvLyBhbGlhc2VzLCBleGNlcHQgXFxibSBkZWZpbmVkIGJlbG93XG4gIFwiXFxcXEJiYlwiLCBcIlxcXFxib2xkXCIsIFwiXFxcXGZyYWtcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5Bcmd1bWVudDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gbm9ybWFsaXplQXJndW1lbnQoYXJnc1swXSk7XG4gICAgdmFyIGZ1bmMgPSBmdW5jTmFtZTtcblxuICAgIGlmIChmdW5jIGluIGZvbnRBbGlhc2VzKSB7XG4gICAgICBmdW5jID0gZm9udEFsaWFzZXNbZnVuY107XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZm9udFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBmb250OiBmdW5jLnNsaWNlKDEpLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ1LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDRcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1jbGFzc1wiLFxuICBuYW1lczogW1wiXFxcXGJvbGRzeW1ib2xcIiwgXCJcXFxcYm1cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZjIsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICB2YXIgaXNDaGFyYWN0ZXJCb3ggPSB1dGlscy5pc0NoYXJhY3RlckJveChib2R5KTsgLy8gYW1zYnN5LnN0eSdzIFxcYm9sZHN5bWJvbCB1c2VzIFxcYmlucmVsIHNwYWNpbmcgdG8gaW5oZXJpdCB0aGVcbiAgICAvLyBhcmd1bWVudCdzIGJpbnxyZWx8b3JkIHN0YXR1c1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWNsYXNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogYmlucmVsQ2xhc3MoYm9keSksXG4gICAgICBib2R5OiBbe1xuICAgICAgICB0eXBlOiBcImZvbnRcIixcbiAgICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAgIGZvbnQ6IFwiYm9sZHN5bWJvbFwiLFxuICAgICAgICBib2R5XG4gICAgICB9XSxcbiAgICAgIGlzQ2hhcmFjdGVyQm94OiBpc0NoYXJhY3RlckJveFxuICAgIH07XG4gIH1cbn0pOyAvLyBPbGQgZm9udCBjaGFuZ2luZyBmdW5jdGlvbnNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImZvbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxybVwiLCBcIlxcXFxzZlwiLCBcIlxcXFx0dFwiLCBcIlxcXFxiZlwiLCBcIlxcXFxpdFwiLCBcIlxcXFxjYWxcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmMywgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIGJyZWFrT25Ub2tlblRleHRcbiAgICB9ID0gX3JlZjM7XG4gICAgdmFyIHtcbiAgICAgIG1vZGVcbiAgICB9ID0gcGFyc2VyO1xuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbih0cnVlLCBicmVha09uVG9rZW5UZXh0KTtcbiAgICB2YXIgc3R5bGUgPSBcIm1hdGhcIiArIGZ1bmNOYW1lLnNsaWNlKDEpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImZvbnRcIixcbiAgICAgIG1vZGU6IG1vZGUsXG4gICAgICBmb250OiBzdHlsZSxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgICAgYm9keVxuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ1LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDRcbn0pO1xuXG52YXIgYWRqdXN0U3R5bGUgPSAoc2l6ZSwgb3JpZ2luYWxTdHlsZSkgPT4ge1xuICAvLyBGaWd1cmUgb3V0IHdoYXQgc3R5bGUgdGhpcyBmcmFjdGlvbiBzaG91bGQgYmUgaW4gYmFzZWQgb24gdGhlXG4gIC8vIGZ1bmN0aW9uIHVzZWRcbiAgdmFyIHN0eWxlID0gb3JpZ2luYWxTdHlsZTtcblxuICBpZiAoc2l6ZSA9PT0gXCJkaXNwbGF5XCIpIHtcbiAgICAvLyBHZXQgZGlzcGxheSBzdHlsZSBhcyBhIGRlZmF1bHQuXG4gICAgLy8gSWYgaW5jb21pbmcgc3R5bGUgaXMgc3ViL3N1cCwgdXNlIHN0eWxlLnRleHQoKSB0byBnZXQgY29ycmVjdCBzaXplLlxuICAgIHN0eWxlID0gc3R5bGUuaWQgPj0gU3R5bGUkMS5TQ1JJUFQuaWQgPyBzdHlsZS50ZXh0KCkgOiBTdHlsZSQxLkRJU1BMQVk7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJ0ZXh0XCIgJiYgc3R5bGUuc2l6ZSA9PT0gU3R5bGUkMS5ESVNQTEFZLnNpemUpIHtcbiAgICAvLyBXZSdyZSBpbiBhIFxcdGZyYWMgYnV0IGluY29taW5nIHN0eWxlIGlzIGRpc3BsYXlzdHlsZSwgc286XG4gICAgc3R5bGUgPSBTdHlsZSQxLlRFWFQ7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJzY3JpcHRcIikge1xuICAgIHN0eWxlID0gU3R5bGUkMS5TQ1JJUFQ7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJzY3JpcHRzY3JpcHRcIikge1xuICAgIHN0eWxlID0gU3R5bGUkMS5TQ1JJUFRTQ1JJUFQ7XG4gIH1cblxuICByZXR1cm4gc3R5bGU7XG59O1xuXG52YXIgaHRtbEJ1aWxkZXIkNCA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAvLyBGcmFjdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgb24gcGFnZXMgNDQ0LTQ0NSwgcnVsZXMgMTUoYS1lKS5cbiAgdmFyIHN0eWxlID0gYWRqdXN0U3R5bGUoZ3JvdXAuc2l6ZSwgb3B0aW9ucy5zdHlsZSk7XG4gIHZhciBuc3R5bGUgPSBzdHlsZS5mcmFjTnVtKCk7XG4gIHZhciBkc3R5bGUgPSBzdHlsZS5mcmFjRGVuKCk7XG4gIHZhciBuZXdPcHRpb25zO1xuICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuc3R5bGUpO1xuICB2YXIgbnVtZXJtID0gYnVpbGRHcm91cCQxKGdyb3VwLm51bWVyLCBuZXdPcHRpb25zLCBvcHRpb25zKTtcblxuICBpZiAoZ3JvdXAuY29udGludWVkKSB7XG4gICAgLy8gXFxjZnJhYyBpbnNlcnRzIGEgXFxzdHJ1dCBpbnRvIHRoZSBudW1lcmF0b3IuXG4gICAgLy8gR2V0IFxcc3RydXQgZGltZW5zaW9ucyBmcm9tIFRlWGJvb2sgcGFnZSAzNTMuXG4gICAgdmFyIGhTdHJ1dCA9IDguNSAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICAgIHZhciBkU3RydXQgPSAzLjUgLyBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtcbiAgICBudW1lcm0uaGVpZ2h0ID0gbnVtZXJtLmhlaWdodCA8IGhTdHJ1dCA/IGhTdHJ1dCA6IG51bWVybS5oZWlnaHQ7XG4gICAgbnVtZXJtLmRlcHRoID0gbnVtZXJtLmRlcHRoIDwgZFN0cnV0ID8gZFN0cnV0IDogbnVtZXJtLmRlcHRoO1xuICB9XG5cbiAgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoZHN0eWxlKTtcbiAgdmFyIGRlbm9tbSA9IGJ1aWxkR3JvdXAkMShncm91cC5kZW5vbSwgbmV3T3B0aW9ucywgb3B0aW9ucyk7XG4gIHZhciBydWxlO1xuICB2YXIgcnVsZVdpZHRoO1xuICB2YXIgcnVsZVNwYWNpbmc7XG5cbiAgaWYgKGdyb3VwLmhhc0JhckxpbmUpIHtcbiAgICBpZiAoZ3JvdXAuYmFyU2l6ZSkge1xuICAgICAgcnVsZVdpZHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC5iYXJTaXplLCBvcHRpb25zKTtcbiAgICAgIHJ1bGUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJmcmFjLWxpbmVcIiwgb3B0aW9ucywgcnVsZVdpZHRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcnVsZSA9IGJ1aWxkQ29tbW9uLm1ha2VMaW5lU3BhbihcImZyYWMtbGluZVwiLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBydWxlV2lkdGggPSBydWxlLmhlaWdodDtcbiAgICBydWxlU3BhY2luZyA9IHJ1bGUuaGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIHJ1bGUgPSBudWxsO1xuICAgIHJ1bGVXaWR0aCA9IDA7XG4gICAgcnVsZVNwYWNpbmcgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gIH0gLy8gUnVsZSAxNWJcblxuXG4gIHZhciBudW1TaGlmdDtcbiAgdmFyIGNsZWFyYW5jZTtcbiAgdmFyIGRlbm9tU2hpZnQ7XG5cbiAgaWYgKHN0eWxlLnNpemUgPT09IFN0eWxlJDEuRElTUExBWS5zaXplIHx8IGdyb3VwLnNpemUgPT09IFwiZGlzcGxheVwiKSB7XG4gICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMTtcblxuICAgIGlmIChydWxlV2lkdGggPiAwKSB7XG4gICAgICBjbGVhcmFuY2UgPSAzICogcnVsZVNwYWNpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyYW5jZSA9IDcgKiBydWxlU3BhY2luZztcbiAgICB9XG5cbiAgICBkZW5vbVNoaWZ0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlbm9tMTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocnVsZVdpZHRoID4gMCkge1xuICAgICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMjtcbiAgICAgIGNsZWFyYW5jZSA9IHJ1bGVTcGFjaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1TaGlmdCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5udW0zO1xuICAgICAgY2xlYXJhbmNlID0gMyAqIHJ1bGVTcGFjaW5nO1xuICAgIH1cblxuICAgIGRlbm9tU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVub20yO1xuICB9XG5cbiAgdmFyIGZyYWM7XG5cbiAgaWYgKCFydWxlKSB7XG4gICAgLy8gUnVsZSAxNWNcbiAgICB2YXIgY2FuZGlkYXRlQ2xlYXJhbmNlID0gbnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoZGVub21tLmhlaWdodCAtIGRlbm9tU2hpZnQpO1xuXG4gICAgaWYgKGNhbmRpZGF0ZUNsZWFyYW5jZSA8IGNsZWFyYW5jZSkge1xuICAgICAgbnVtU2hpZnQgKz0gMC41ICogKGNsZWFyYW5jZSAtIGNhbmRpZGF0ZUNsZWFyYW5jZSk7XG4gICAgICBkZW5vbVNoaWZ0ICs9IDAuNSAqIChjbGVhcmFuY2UgLSBjYW5kaWRhdGVDbGVhcmFuY2UpO1xuICAgIH1cblxuICAgIGZyYWMgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBkZW5vbW0sXG4gICAgICAgIHNoaWZ0OiBkZW5vbVNoaWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBudW1lcm0sXG4gICAgICAgIHNoaWZ0OiAtbnVtU2hpZnRcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUnVsZSAxNWRcbiAgICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuXG4gICAgaWYgKG51bVNoaWZ0IC0gbnVtZXJtLmRlcHRoIC0gKGF4aXNIZWlnaHQgKyAwLjUgKiBydWxlV2lkdGgpIDwgY2xlYXJhbmNlKSB7XG4gICAgICBudW1TaGlmdCArPSBjbGVhcmFuY2UgLSAobnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoYXhpc0hlaWdodCArIDAuNSAqIHJ1bGVXaWR0aCkpO1xuICAgIH1cblxuICAgIGlmIChheGlzSGVpZ2h0IC0gMC41ICogcnVsZVdpZHRoIC0gKGRlbm9tbS5oZWlnaHQgLSBkZW5vbVNoaWZ0KSA8IGNsZWFyYW5jZSkge1xuICAgICAgZGVub21TaGlmdCArPSBjbGVhcmFuY2UgLSAoYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCAtIChkZW5vbW0uaGVpZ2h0IC0gZGVub21TaGlmdCkpO1xuICAgIH1cblxuICAgIHZhciBtaWRTaGlmdCA9IC0oYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCk7XG4gICAgZnJhYyA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGRlbm9tbSxcbiAgICAgICAgc2hpZnQ6IGRlbm9tU2hpZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHJ1bGUsXG4gICAgICAgIHNoaWZ0OiBtaWRTaGlmdFxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbnVtZXJtLFxuICAgICAgICBzaGlmdDogLW51bVNoaWZ0XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IC8vIFNpbmNlIHdlIG1hbnVhbGx5IGNoYW5nZSB0aGUgc3R5bGUgc29tZXRpbWVzICh3aXRoIFxcZGZyYWMgb3IgXFx0ZnJhYyksXG4gIC8vIGFjY291bnQgZm9yIHRoZSBwb3NzaWJsZSBzaXplIGNoYW5nZSBoZXJlLlxuXG5cbiAgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpO1xuICBmcmFjLmhlaWdodCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgZnJhYy5kZXB0aCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gUnVsZSAxNWVcblxuICB2YXIgZGVsaW1TaXplO1xuXG4gIGlmIChzdHlsZS5zaXplID09PSBTdHlsZSQxLkRJU1BMQVkuc2l6ZSkge1xuICAgIGRlbGltU2l6ZSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWxpbTE7XG4gIH0gZWxzZSBpZiAoc3R5bGUuc2l6ZSA9PT0gU3R5bGUkMS5TQ1JJUFRTQ1JJUFQuc2l6ZSkge1xuICAgIGRlbGltU2l6ZSA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoU3R5bGUkMS5TQ1JJUFQpLmZvbnRNZXRyaWNzKCkuZGVsaW0yO1xuICB9IGVsc2Uge1xuICAgIGRlbGltU2l6ZSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWxpbTI7XG4gIH1cblxuICB2YXIgbGVmdERlbGltO1xuICB2YXIgcmlnaHREZWxpbTtcblxuICBpZiAoZ3JvdXAubGVmdERlbGltID09IG51bGwpIHtcbiAgICBsZWZ0RGVsaW0gPSBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBbXCJtb3BlblwiXSk7XG4gIH0gZWxzZSB7XG4gICAgbGVmdERlbGltID0gZGVsaW1pdGVyLmN1c3RvbVNpemVkRGVsaW0oZ3JvdXAubGVmdERlbGltLCBkZWxpbVNpemUsIHRydWUsIG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpLCBncm91cC5tb2RlLCBbXCJtb3BlblwiXSk7XG4gIH1cblxuICBpZiAoZ3JvdXAuY29udGludWVkKSB7XG4gICAgcmlnaHREZWxpbSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdKTsgLy8gemVybyB3aWR0aCBmb3IgXFxjZnJhY1xuICB9IGVsc2UgaWYgKGdyb3VwLnJpZ2h0RGVsaW0gPT0gbnVsbCkge1xuICAgIHJpZ2h0RGVsaW0gPSBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBbXCJtY2xvc2VcIl0pO1xuICB9IGVsc2Uge1xuICAgIHJpZ2h0RGVsaW0gPSBkZWxpbWl0ZXIuY3VzdG9tU2l6ZWREZWxpbShncm91cC5yaWdodERlbGltLCBkZWxpbVNpemUsIHRydWUsIG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpLCBncm91cC5tb2RlLCBbXCJtY2xvc2VcIl0pO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0uY29uY2F0KG5ld09wdGlvbnMuc2l6aW5nQ2xhc3NlcyhvcHRpb25zKSksIFtsZWZ0RGVsaW0sIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1mcmFjXCJdLCBbZnJhY10pLCByaWdodERlbGltXSwgb3B0aW9ucyk7XG59O1xuXG52YXIgbWF0aG1sQnVpbGRlciQzID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtZnJhY1wiLCBbYnVpbGRHcm91cChncm91cC5udW1lciwgb3B0aW9ucyksIGJ1aWxkR3JvdXAoZ3JvdXAuZGVub20sIG9wdGlvbnMpXSk7XG5cbiAgaWYgKCFncm91cC5oYXNCYXJMaW5lKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsaW5ldGhpY2tuZXNzXCIsIFwiMHB4XCIpO1xuICB9IGVsc2UgaWYgKGdyb3VwLmJhclNpemUpIHtcbiAgICB2YXIgcnVsZVdpZHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC5iYXJTaXplLCBvcHRpb25zKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImxpbmV0aGlja25lc3NcIiwgbWFrZUVtKHJ1bGVXaWR0aCkpO1xuICB9XG5cbiAgdmFyIHN0eWxlID0gYWRqdXN0U3R5bGUoZ3JvdXAuc2l6ZSwgb3B0aW9ucy5zdHlsZSk7XG5cbiAgaWYgKHN0eWxlLnNpemUgIT09IG9wdGlvbnMuc3R5bGUuc2l6ZSkge1xuICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zdHlsZVwiLCBbbm9kZV0pO1xuICAgIHZhciBpc0Rpc3BsYXkgPSBzdHlsZS5zaXplID09PSBTdHlsZSQxLkRJU1BMQVkuc2l6ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZGlzcGxheXN0eWxlXCIsIGlzRGlzcGxheSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBcIjBcIik7XG4gIH1cblxuICBpZiAoZ3JvdXAubGVmdERlbGltICE9IG51bGwgfHwgZ3JvdXAucmlnaHREZWxpbSAhPSBudWxsKSB7XG4gICAgdmFyIHdpdGhEZWxpbXMgPSBbXTtcblxuICAgIGlmIChncm91cC5sZWZ0RGVsaW0gIT0gbnVsbCkge1xuICAgICAgdmFyIGxlZnRPcCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKGdyb3VwLmxlZnREZWxpbS5yZXBsYWNlKFwiXFxcXFwiLCBcIlwiKSldKTtcbiAgICAgIGxlZnRPcC5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgICB3aXRoRGVsaW1zLnB1c2gobGVmdE9wKTtcbiAgICB9XG5cbiAgICB3aXRoRGVsaW1zLnB1c2gobm9kZSk7XG5cbiAgICBpZiAoZ3JvdXAucmlnaHREZWxpbSAhPSBudWxsKSB7XG4gICAgICB2YXIgcmlnaHRPcCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKGdyb3VwLnJpZ2h0RGVsaW0ucmVwbGFjZShcIlxcXFxcIiwgXCJcIikpXSk7XG4gICAgICByaWdodE9wLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwidHJ1ZVwiKTtcbiAgICAgIHdpdGhEZWxpbXMucHVzaChyaWdodE9wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZVJvdyh3aXRoRGVsaW1zKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImdlbmZyYWNcIixcbiAgbmFtZXM6IFtcIlxcXFxkZnJhY1wiLCBcIlxcXFxmcmFjXCIsIFwiXFxcXHRmcmFjXCIsIFwiXFxcXGRiaW5vbVwiLCBcIlxcXFxiaW5vbVwiLCBcIlxcXFx0Ymlub21cIiwgXCJcXFxcXFxcXGF0b3BmcmFjXCIsIC8vIGNhbuKAmXQgYmUgZW50ZXJlZCBkaXJlY3RseVxuICBcIlxcXFxcXFxcYnJhY2VmcmFjXCIsIFwiXFxcXFxcXFxicmFja2ZyYWNcIiAvLyBkaXR0b1xuICBdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluQXJndW1lbnQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMV07XG4gICAgdmFyIGhhc0JhckxpbmU7XG4gICAgdmFyIGxlZnREZWxpbSA9IG51bGw7XG4gICAgdmFyIHJpZ2h0RGVsaW0gPSBudWxsO1xuICAgIHZhciBzaXplID0gXCJhdXRvXCI7XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXGRmcmFjXCI6XG4gICAgICBjYXNlIFwiXFxcXGZyYWNcIjpcbiAgICAgIGNhc2UgXCJcXFxcdGZyYWNcIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXFxcXFxhdG9wZnJhY1wiOlxuICAgICAgICBoYXNCYXJMaW5lID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGRiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFxiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IGZhbHNlO1xuICAgICAgICBsZWZ0RGVsaW0gPSBcIihcIjtcbiAgICAgICAgcmlnaHREZWxpbSA9IFwiKVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2VmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJcXFxce1wiO1xuICAgICAgICByaWdodERlbGltID0gXCJcXFxcfVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJbXCI7XG4gICAgICAgIHJpZ2h0RGVsaW0gPSBcIl1cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBnZW5mcmFjIGNvbW1hbmRcIik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChmdW5jTmFtZSkge1xuICAgICAgY2FzZSBcIlxcXFxkZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFxkYmlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwiZGlzcGxheVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFx0ZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwidGV4dFwiO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbnRpbnVlZDogZmFsc2UsXG4gICAgICBudW1lcixcbiAgICAgIGRlbm9tLFxuICAgICAgaGFzQmFyTGluZSxcbiAgICAgIGxlZnREZWxpbSxcbiAgICAgIHJpZ2h0RGVsaW0sXG4gICAgICBzaXplLFxuICAgICAgYmFyU2l6ZTogbnVsbFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ0LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDNcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImdlbmZyYWNcIixcbiAgbmFtZXM6IFtcIlxcXFxjZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmMiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZ2VuZnJhY1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBjb250aW51ZWQ6IHRydWUsXG4gICAgICBudW1lcixcbiAgICAgIGRlbm9tLFxuICAgICAgaGFzQmFyTGluZTogdHJ1ZSxcbiAgICAgIGxlZnREZWxpbTogbnVsbCxcbiAgICAgIHJpZ2h0RGVsaW06IG51bGwsXG4gICAgICBzaXplOiBcImRpc3BsYXlcIixcbiAgICAgIGJhclNpemU6IG51bGxcbiAgICB9O1xuICB9XG59KTsgLy8gSW5maXggZ2VuZXJhbGl6ZWQgZnJhY3Rpb25zIC0tIHRoZXNlIGFyZSBub3QgcmVuZGVyZWQgZGlyZWN0bHksIGJ1dCByZXBsYWNlZFxuLy8gaW1tZWRpYXRlbHkgYnkgb25lIG9mIHRoZSB2YXJpYW50cyBhYm92ZS5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImluZml4XCIsXG4gIG5hbWVzOiBbXCJcXFxcb3ZlclwiLCBcIlxcXFxjaG9vc2VcIiwgXCJcXFxcYXRvcFwiLCBcIlxcXFxicmFjZVwiLCBcIlxcXFxicmFja1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHRva2VuXG4gICAgfSA9IF9yZWYzO1xuICAgIHZhciByZXBsYWNlV2l0aDtcblxuICAgIHN3aXRjaCAoZnVuY05hbWUpIHtcbiAgICAgIGNhc2UgXCJcXFxcb3ZlclwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXGZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcY2hvb3NlXCI6XG4gICAgICAgIHJlcGxhY2VXaXRoID0gXCJcXFxcYmlub21cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYXRvcFwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxhdG9wZnJhY1wiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxicmFjZVwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxicmFjZWZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYnJhY2tcIjpcbiAgICAgICAgcmVwbGFjZVdpdGggPSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgaW5maXggZ2VuZnJhYyBjb21tYW5kXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoLFxuICAgICAgdG9rZW5cbiAgICB9O1xuICB9XG5cbn0pO1xudmFyIHN0eWxBcnJheSA9IFtcImRpc3BsYXlcIiwgXCJ0ZXh0XCIsIFwic2NyaXB0XCIsIFwic2NyaXB0c2NyaXB0XCJdO1xuXG52YXIgZGVsaW1Gcm9tVmFsdWUgPSBmdW5jdGlvbiBkZWxpbUZyb21WYWx1ZShkZWxpbVN0cmluZykge1xuICB2YXIgZGVsaW0gPSBudWxsO1xuXG4gIGlmIChkZWxpbVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgZGVsaW0gPSBkZWxpbVN0cmluZztcbiAgICBkZWxpbSA9IGRlbGltID09PSBcIi5cIiA/IG51bGwgOiBkZWxpbTtcbiAgfVxuXG4gIHJldHVybiBkZWxpbTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcZ2VuZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiA2LFxuICAgIGFsbG93ZWRJbkFyZ3VtZW50OiB0cnVlLFxuICAgIGFyZ1R5cGVzOiBbXCJtYXRoXCIsIFwibWF0aFwiLCBcInNpemVcIiwgXCJ0ZXh0XCIsIFwibWF0aFwiLCBcIm1hdGhcIl1cbiAgfSxcblxuICBoYW5kbGVyKF9yZWY0LCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmNDtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzRdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbNV07IC8vIExvb2sgaW50byB0aGUgcGFyc2Ugbm9kZXMgdG8gZ2V0IHRoZSBkZXNpcmVkIGRlbGltaXRlcnMuXG5cbiAgICB2YXIgbGVmdE5vZGUgPSBub3JtYWxpemVBcmd1bWVudChhcmdzWzBdKTtcbiAgICB2YXIgbGVmdERlbGltID0gbGVmdE5vZGUudHlwZSA9PT0gXCJhdG9tXCIgJiYgbGVmdE5vZGUuZmFtaWx5ID09PSBcIm9wZW5cIiA/IGRlbGltRnJvbVZhbHVlKGxlZnROb2RlLnRleHQpIDogbnVsbDtcbiAgICB2YXIgcmlnaHROb2RlID0gbm9ybWFsaXplQXJndW1lbnQoYXJnc1sxXSk7XG4gICAgdmFyIHJpZ2h0RGVsaW0gPSByaWdodE5vZGUudHlwZSA9PT0gXCJhdG9tXCIgJiYgcmlnaHROb2RlLmZhbWlseSA9PT0gXCJjbG9zZVwiID8gZGVsaW1Gcm9tVmFsdWUocmlnaHROb2RlLnRleHQpIDogbnVsbDtcbiAgICB2YXIgYmFyTm9kZSA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMl0sIFwic2l6ZVwiKTtcbiAgICB2YXIgaGFzQmFyTGluZTtcbiAgICB2YXIgYmFyU2l6ZSA9IG51bGw7XG5cbiAgICBpZiAoYmFyTm9kZS5pc0JsYW5rKSB7XG4gICAgICAvLyBcXGdlbmZyYWMgYWN0cyBkaWZmZXJlbnRseSB0aGFuIFxcYWJvdmUuXG4gICAgICAvLyBcXGdlbmZyYWMgdHJlYXRzIGFuIGVtcHR5IHNpemUgZ3JvdXAgYXMgYSBzaWduYWwgdG8gdXNlIGFcbiAgICAgIC8vIHN0YW5kYXJkIGJhciBzaXplLiBcXGFib3ZlIHdvdWxkIHNlZSBzaXplID0gMCBhbmQgb21pdCB0aGUgYmFyLlxuICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhclNpemUgPSBiYXJOb2RlLnZhbHVlO1xuICAgICAgaGFzQmFyTGluZSA9IGJhclNpemUubnVtYmVyID4gMDtcbiAgICB9IC8vIEZpbmQgb3V0IGlmIHdlIHdhbnQgZGlzcGxheXN0eWxlLCB0ZXh0c3R5bGUsIGV0Yy5cblxuXG4gICAgdmFyIHNpemUgPSBcImF1dG9cIjtcbiAgICB2YXIgc3R5bCA9IGFyZ3NbM107XG5cbiAgICBpZiAoc3R5bC50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgIGlmIChzdHlsLmJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgdGV4dE9yZCA9IGFzc2VydE5vZGVUeXBlKHN0eWwuYm9keVswXSwgXCJ0ZXh0b3JkXCIpO1xuICAgICAgICBzaXplID0gc3R5bEFycmF5W051bWJlcih0ZXh0T3JkLnRleHQpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bCA9IGFzc2VydE5vZGVUeXBlKHN0eWwsIFwidGV4dG9yZFwiKTtcbiAgICAgIHNpemUgPSBzdHlsQXJyYXlbTnVtYmVyKHN0eWwudGV4dCldO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImdlbmZyYWNcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbnVtZXIsXG4gICAgICBkZW5vbSxcbiAgICAgIGNvbnRpbnVlZDogZmFsc2UsXG4gICAgICBoYXNCYXJMaW5lLFxuICAgICAgYmFyU2l6ZSxcbiAgICAgIGxlZnREZWxpbSxcbiAgICAgIHJpZ2h0RGVsaW0sXG4gICAgICBzaXplXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNCxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQzXG59KTsgLy8gXFxhYm92ZSBpcyBhbiBpbmZpeCBmcmFjdGlvbiB0aGF0IGFsc28gZGVmaW5lcyBhIGZyYWN0aW9uIGJhciBzaXplLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5maXhcIixcbiAgbmFtZXM6IFtcIlxcXFxhYm92ZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmNSwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHRva2VuXG4gICAgfSA9IF9yZWY1O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoOiBcIlxcXFxcXFxcYWJvdmVmcmFjXCIsXG4gICAgICBzaXplOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIikudmFsdWUsXG4gICAgICB0b2tlblxuICAgIH07XG4gIH1cblxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZ2VuZnJhY1wiLFxuICBuYW1lczogW1wiXFxcXFxcXFxhYm92ZWZyYWNcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMyxcbiAgICBhcmdUeXBlczogW1wibWF0aFwiLCBcInNpemVcIiwgXCJtYXRoXCJdXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmNiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmNjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBiYXJTaXplID0gYXNzZXJ0KGFzc2VydE5vZGVUeXBlKGFyZ3NbMV0sIFwiaW5maXhcIikuc2l6ZSk7XG4gICAgdmFyIGRlbm9tID0gYXJnc1syXTtcbiAgICB2YXIgaGFzQmFyTGluZSA9IGJhclNpemUubnVtYmVyID4gMDtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG51bWVyLFxuICAgICAgZGVub20sXG4gICAgICBjb250aW51ZWQ6IGZhbHNlLFxuICAgICAgaGFzQmFyTGluZSxcbiAgICAgIGJhclNpemUsXG4gICAgICBsZWZ0RGVsaW06IG51bGwsXG4gICAgICByaWdodERlbGltOiBudWxsLFxuICAgICAgc2l6ZTogXCJhdXRvXCJcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNCxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQzXG59KTtcblxuLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJob3JpekJyYWNlXCIsIGJ1dFxuLy8gYWxzbyBcInN1cHN1YlwiIHNpbmNlIGFuIG92ZXIvdW5kZXJicmFjZSBjYW4gYWZmZWN0IHN1cGVyL3N1YnNjcmlwdGluZy5cbnZhciBodG1sQnVpbGRlciQzID0gKGdycCwgb3B0aW9ucykgPT4ge1xuICB2YXIgc3R5bGUgPSBvcHRpb25zLnN0eWxlOyAvLyBQdWxsIG91dCB0aGUgYFBhcnNlTm9kZTxcImhvcml6QnJhY2VcIj5gIGlmIGBncnBgIGlzIGEgXCJzdXBzdWJcIiBub2RlLlxuXG4gIHZhciBzdXBTdWJHcm91cDtcbiAgdmFyIGdyb3VwO1xuXG4gIGlmIChncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIFJlZjogTGFUZVggc291cmNlMmU6IH19fX1cXGxpbWl0c31cbiAgICAvLyBpLmUuIExhVGVYIHRyZWF0cyB0aGUgYnJhY2Ugc2ltaWxhciB0byBhbiBvcCBhbmQgcGFzc2VzIGl0XG4gICAgLy8gd2l0aCBcXGxpbWl0cywgc28gd2UgbmVlZCB0byBhc3NpZ24gc3Vwc3ViIHN0eWxlLlxuICAgIHN1cFN1Ykdyb3VwID0gZ3JwLnN1cCA/IGJ1aWxkR3JvdXAkMShncnAuc3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKSwgb3B0aW9ucykgOiBidWlsZEdyb3VwJDEoZ3JwLnN1Yiwgb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSksIG9wdGlvbnMpO1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoZ3JwLmJhc2UsIFwiaG9yaXpCcmFjZVwiKTtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJob3JpekJyYWNlXCIpO1xuICB9IC8vIEJ1aWxkIHRoZSBiYXNlIGdyb3VwXG5cblxuICB2YXIgYm9keSA9IGJ1aWxkR3JvdXAkMShncm91cC5iYXNlLCBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZShTdHlsZSQxLkRJU1BMQVkpKTsgLy8gQ3JlYXRlIHRoZSBzdHJldGNoeSBlbGVtZW50XG5cbiAgdmFyIGJyYWNlQm9keSA9IHN0cmV0Y2h5LnN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpOyAvLyBHZW5lcmF0ZSB0aGUgdmxpc3QsIHdpdGggdGhlIGFwcHJvcHJpYXRlIGtlcm5zICAgICAgICDilI/ilIHilIHilIHilIHilIHilIHilIHilIHilJNcbiAgLy8gVGhpcyBmaXJzdCB2bGlzdCBjb250YWlucyB0aGUgY29udGVudCBhbmQgdGhlIGJyYWNlOiAgIGVxdWF0aW9uXG5cbiAgdmFyIHZsaXN0O1xuXG4gIGlmIChncm91cC5pc092ZXIpIHtcbiAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAwLjFcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJyYWNlQm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gJEZsb3dGaXhNZTogUmVwbGFjZSB0aGlzIHdpdGggcGFzc2luZyBcInN2Zy1hbGlnblwiIGludG8gbWFrZVZMaXN0LlxuXG4gICAgdmxpc3QuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMV0uY2xhc3Nlcy5wdXNoKFwic3ZnLWFsaWduXCIpO1xuICB9IGVsc2Uge1xuICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJib3R0b21cIixcbiAgICAgIHBvc2l0aW9uRGF0YTogYm9keS5kZXB0aCArIDAuMSArIGJyYWNlQm9keS5oZWlnaHQsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJyYWNlQm9keVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogMC4xXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpOyAvLyAkRmxvd0ZpeE1lOiBSZXBsYWNlIHRoaXMgd2l0aCBwYXNzaW5nIFwic3ZnLWFsaWduXCIgaW50byBtYWtlVkxpc3QuXG5cbiAgICB2bGlzdC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jbGFzc2VzLnB1c2goXCJzdmctYWxpZ25cIik7XG4gIH1cblxuICBpZiAoc3VwU3ViR3JvdXApIHtcbiAgICAvLyBUbyB3cml0ZSB0aGUgc3Vwc3ViLCB3cmFwIHRoZSBmaXJzdCB2bGlzdCBpbiBhbm90aGVyIHZsaXN0OlxuICAgIC8vIFRoZXkgY2FuJ3QgYWxsIGdvIGluIHRoZSBzYW1lIHZsaXN0LCBiZWNhdXNlIHRoZSBub3RlIG1pZ2h0IGJlXG4gICAgLy8gd2lkZXIgdGhhbiB0aGUgZXF1YXRpb24uIFdlIHdhbnQgdGhlIGVxdWF0aW9uIHRvIGNvbnRyb2wgdGhlXG4gICAgLy8gYnJhY2Ugd2lkdGguXG4gICAgLy8gICAgICBub3RlICAgICAgICAgIGxvbmcgbm90ZSAgICAgICAgICAgbG9uZyBub3RlXG4gICAgLy8gICDilI/ilIHilIHilIHilIHilIHilIHilIHilIHilJMgICBvciAgICDilI/ilIHilIHilIHilJMgICAgIG5vdCAgICDilI/ilIHilIHilIHilIHilIHilIHilIHilIHilIHilJNcbiAgICAvLyAgICBlcXVhdGlvbiAgICAgICAgICAgZXFuICAgICAgICAgICAgICAgICBlcW5cbiAgICB2YXIgdlNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIGdyb3VwLmlzT3ZlciA/IFwibW92ZXJcIiA6IFwibXVuZGVyXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcblxuICAgIGlmIChncm91cC5pc092ZXIpIHtcbiAgICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogdlNwYW5cbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICAgIHNpemU6IDAuMlxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogc3VwU3ViR3JvdXBcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJib3R0b21cIixcbiAgICAgICAgcG9zaXRpb25EYXRhOiB2U3Bhbi5kZXB0aCArIDAuMiArIHN1cFN1Ykdyb3VwLmhlaWdodCArIHN1cFN1Ykdyb3VwLmRlcHRoLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBzdXBTdWJHcm91cFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgICAgc2l6ZTogMC4yXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiB2U3BhblxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgZ3JvdXAuaXNPdmVyID8gXCJtb3ZlclwiIDogXCJtdW5kZXJcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xufTtcblxudmFyIG1hdGhtbEJ1aWxkZXIkMiA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgYWNjZW50Tm9kZSA9IHN0cmV0Y2h5Lm1hdGhNTG5vZGUoZ3JvdXAubGFiZWwpO1xuICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoZ3JvdXAuaXNPdmVyID8gXCJtb3ZlclwiIDogXCJtdW5kZXJcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyksIGFjY2VudE5vZGVdKTtcbn07IC8vIEhvcml6b250YWwgc3RyZXRjaHkgYnJhY2VzXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImhvcml6QnJhY2VcIixcbiAgbmFtZXM6IFtcIlxcXFxvdmVyYnJhY2VcIiwgXCJcXFxcdW5kZXJicmFjZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaG9yaXpCcmFjZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBpc092ZXI6IC9eXFxcXG92ZXIvLnRlc3QoZnVuY05hbWUpLFxuICAgICAgYmFzZTogYXJnc1swXVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDMsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMlxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJocmVmXCIsXG4gIG5hbWVzOiBbXCJcXFxcaHJlZlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFyZ1R5cGVzOiBbXCJ1cmxcIiwgXCJvcmlnaW5hbFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1sxXTtcbiAgICB2YXIgaHJlZiA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwidXJsXCIpLnVybDtcblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh7XG4gICAgICBjb21tYW5kOiBcIlxcXFxocmVmXCIsXG4gICAgICB1cmw6IGhyZWZcbiAgICB9KSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5mb3JtYXRVbnN1cHBvcnRlZENtZChcIlxcXFxocmVmXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImhyZWZcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgaHJlZixcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkRXhwcmVzc2lvbiQxKGdyb3VwLmJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUFuY2hvcihncm91cC5ocmVmLCBbXSwgZWxlbWVudHMsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbWF0aCA9IGJ1aWxkRXhwcmVzc2lvblJvdyhncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICAgIGlmICghKG1hdGggaW5zdGFuY2VvZiBNYXRoTm9kZSkpIHtcbiAgICAgIG1hdGggPSBuZXcgTWF0aE5vZGUoXCJtcm93XCIsIFttYXRoXSk7XG4gICAgfVxuXG4gICAgbWF0aC5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGdyb3VwLmhyZWYpO1xuICAgIHJldHVybiBtYXRoO1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJocmVmXCIsXG4gIG5hbWVzOiBbXCJcXFxcdXJsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcInVybFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmMiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjI7XG4gICAgdmFyIGhyZWYgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInVybFwiKS51cmw7XG5cbiAgICBpZiAoIXBhcnNlci5zZXR0aW5ncy5pc1RydXN0ZWQoe1xuICAgICAgY29tbWFuZDogXCJcXFxcdXJsXCIsXG4gICAgICB1cmw6IGhyZWZcbiAgICB9KSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5mb3JtYXRVbnN1cHBvcnRlZENtZChcIlxcXFx1cmxcIik7XG4gICAgfVxuXG4gICAgdmFyIGNoYXJzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhyZWYubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gaHJlZltpXTtcblxuICAgICAgaWYgKGMgPT09IFwiflwiKSB7XG4gICAgICAgIGMgPSBcIlxcXFx0ZXh0YXNjaWl0aWxkZVwiO1xuICAgICAgfVxuXG4gICAgICBjaGFycy5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBjXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgYm9keSA9IHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBmb250OiBcIlxcXFx0ZXh0dHRcIixcbiAgICAgIGJvZHk6IGNoYXJzXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJocmVmXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGhyZWYsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH1cbn0pO1xuXG4vLyBJbiBMYVRlWCwgXFx2Y2VudGVyIGNhbiBhY3Qgb25seSBvbiBhIGJveCwgYXMgaW5cbi8vIFxcdmNlbnRlcntcXGhib3h7JFxcZnJhY3thK2J9e1xcZGZyYWN7Y317ZH19JH19XG4vLyBUaGlzIGZ1bmN0aW9uIGJ5IGl0c2VsZiBkb2Vzbid0IGRvIGFueXRoaW5nIGJ1dCBwcmV2ZW50IGEgc29mdCBsaW5lIGJyZWFrLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaGJveFwiLFxuICBuYW1lczogW1wiXFxcXGhib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJoYm94XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGFyZ3NbMF0pXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkRXhwcmVzc2lvbiQxKGdyb3VwLmJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBidWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHRtbFwiLFxuICBuYW1lczogW1wiXFxcXGh0bWxDbGFzc1wiLCBcIlxcXFxodG1sSWRcIiwgXCJcXFxcaHRtbFN0eWxlXCIsIFwiXFxcXGh0bWxEYXRhXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYXJnVHlwZXM6IFtcInJhd1wiLCBcIm9yaWdpbmFsXCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWUsXG4gICAgICB0b2tlblxuICAgIH0gPSBfcmVmO1xuICAgIHZhciB2YWx1ZSA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwicmF3XCIpLnN0cmluZztcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG5cbiAgICBpZiAocGFyc2VyLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgcGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcImh0bWxFeHRlbnNpb25cIiwgXCJIVE1MIGV4dGVuc2lvbiBpcyBkaXNhYmxlZCBvbiBzdHJpY3QgbW9kZVwiKTtcbiAgICB9XG5cbiAgICB2YXIgdHJ1c3RDb250ZXh0O1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXGh0bWxDbGFzc1wiOlxuICAgICAgICBhdHRyaWJ1dGVzLmNsYXNzID0gdmFsdWU7XG4gICAgICAgIHRydXN0Q29udGV4dCA9IHtcbiAgICAgICAgICBjb21tYW5kOiBcIlxcXFxodG1sQ2xhc3NcIixcbiAgICAgICAgICBjbGFzczogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcaHRtbElkXCI6XG4gICAgICAgIGF0dHJpYnV0ZXMuaWQgPSB2YWx1ZTtcbiAgICAgICAgdHJ1c3RDb250ZXh0ID0ge1xuICAgICAgICAgIGNvbW1hbmQ6IFwiXFxcXGh0bWxJZFwiLFxuICAgICAgICAgIGlkOiB2YWx1ZVxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxodG1sU3R5bGVcIjpcbiAgICAgICAgYXR0cmlidXRlcy5zdHlsZSA9IHZhbHVlO1xuICAgICAgICB0cnVzdENvbnRleHQgPSB7XG4gICAgICAgICAgY29tbWFuZDogXCJcXFxcaHRtbFN0eWxlXCIsXG4gICAgICAgICAgc3R5bGU6IHZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGh0bWxEYXRhXCI6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IHZhbHVlLnNwbGl0KFwiLFwiKTtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleVZhbCA9IGRhdGFbaV0uc3BsaXQoXCI9XCIpO1xuXG4gICAgICAgICAgICBpZiAoa2V5VmFsLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkVycm9yIHBhcnNpbmcga2V5LXZhbHVlIGZvciBcXFxcaHRtbERhdGFcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbXCJkYXRhLVwiICsga2V5VmFsWzBdLnRyaW0oKV0gPSBrZXlWYWxbMV0udHJpbSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRydXN0Q29udGV4dCA9IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiXFxcXGh0bWxEYXRhXCIsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgaHRtbCBjb21tYW5kXCIpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh0cnVzdENvbnRleHQpKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLmZvcm1hdFVuc3VwcG9ydGVkQ21kKGZ1bmNOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJodG1sXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5ib2R5LCBvcHRpb25zLCBmYWxzZSk7XG4gICAgdmFyIGNsYXNzZXMgPSBbXCJlbmNsb3NpbmdcIl07XG5cbiAgICBpZiAoZ3JvdXAuYXR0cmlidXRlcy5jbGFzcykge1xuICAgICAgY2xhc3Nlcy5wdXNoKC4uLmdyb3VwLmF0dHJpYnV0ZXMuY2xhc3MudHJpbSgpLnNwbGl0KC9cXHMrLykpO1xuICAgIH1cblxuICAgIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oY2xhc3NlcywgZWxlbWVudHMsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiBncm91cC5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoYXR0ciAhPT0gXCJjbGFzc1wiICYmIGdyb3VwLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYXR0ciwgZ3JvdXAuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwYW47XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG4gIH1cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHRtbG1hdGhtbFwiLFxuICBuYW1lczogW1wiXFxcXGh0bWxAbWF0aG1sXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJodG1sbWF0aG1sXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGh0bWw6IG9yZGFyZ3VtZW50KGFyZ3NbMF0pLFxuICAgICAgbWF0aG1sOiBvcmRhcmd1bWVudChhcmdzWzFdKVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5odG1sLCBvcHRpb25zLCBmYWxzZSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAubWF0aG1sLCBvcHRpb25zKTtcbiAgfVxufSk7XG5cbnZhciBzaXplRGF0YSA9IGZ1bmN0aW9uIHNpemVEYXRhKHN0cikge1xuICBpZiAoL15bLStdPyAqKFxcZCsoXFwuXFxkKik/fFxcLlxcZCspJC8udGVzdChzdHIpKSB7XG4gICAgLy8gc3RyIGlzIGEgbnVtYmVyIHdpdGggbm8gdW5pdCBzcGVjaWZpZWQuXG4gICAgLy8gZGVmYXVsdCB1bml0IGlzIGJwLCBwZXIgZ3JhcGhpeCBwYWNrYWdlLlxuICAgIHJldHVybiB7XG4gICAgICBudW1iZXI6ICtzdHIsXG4gICAgICB1bml0OiBcImJwXCJcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHZhciBtYXRjaCA9IC8oWy0rXT8pICooXFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSAqKFthLXpdezJ9KS8uZXhlYyhzdHIpO1xuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIHNpemU6ICdcIiArIHN0ciArIFwiJyBpbiBcXFxcaW5jbHVkZWdyYXBoaWNzXCIpO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0ge1xuICAgICAgbnVtYmVyOiArKG1hdGNoWzFdICsgbWF0Y2hbMl0pLFxuICAgICAgLy8gc2lnbiArIG1hZ25pdHVkZSwgY2FzdCB0byBudW1iZXJcbiAgICAgIHVuaXQ6IG1hdGNoWzNdXG4gICAgfTtcblxuICAgIGlmICghdmFsaWRVbml0KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgZGF0YS51bml0ICsgXCInIGluIFxcXFxpbmNsdWRlZ3JhcGhpY3MuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5jbHVkZWdyYXBoaWNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW5jbHVkZWdyYXBoaWNzXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJyYXdcIiwgXCJ1cmxcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MsIG9wdEFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIHdpZHRoID0ge1xuICAgICAgbnVtYmVyOiAwLFxuICAgICAgdW5pdDogXCJlbVwiXG4gICAgfTtcbiAgICB2YXIgaGVpZ2h0ID0ge1xuICAgICAgbnVtYmVyOiAwLjksXG4gICAgICB1bml0OiBcImVtXCJcbiAgICB9OyAvLyBzb3J0YSBjaGFyYWN0ZXIgc2l6ZWQuXG5cbiAgICB2YXIgdG90YWxoZWlnaHQgPSB7XG4gICAgICBudW1iZXI6IDAsXG4gICAgICB1bml0OiBcImVtXCJcbiAgICB9O1xuICAgIHZhciBhbHQgPSBcIlwiO1xuXG4gICAgaWYgKG9wdEFyZ3NbMF0pIHtcbiAgICAgIHZhciBhdHRyaWJ1dGVTdHIgPSBhc3NlcnROb2RlVHlwZShvcHRBcmdzWzBdLCBcInJhd1wiKS5zdHJpbmc7IC8vIFBhcnNlci5qcyBkb2VzIG5vdCBwYXJzZSBrZXkvdmFsdWUgcGFpcnMuIFdlIGdldCBhIHN0cmluZy5cblxuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTdHIuc3BsaXQoXCIsXCIpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleVZhbCA9IGF0dHJpYnV0ZXNbaV0uc3BsaXQoXCI9XCIpO1xuXG4gICAgICAgIGlmIChrZXlWYWwubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdmFyIHN0ciA9IGtleVZhbFsxXS50cmltKCk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGtleVZhbFswXS50cmltKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhbHRcIjpcbiAgICAgICAgICAgICAgYWx0ID0gc3RyO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcIndpZHRoXCI6XG4gICAgICAgICAgICAgIHdpZHRoID0gc2l6ZURhdGEoc3RyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJoZWlnaHRcIjpcbiAgICAgICAgICAgICAgaGVpZ2h0ID0gc2l6ZURhdGEoc3RyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ0b3RhbGhlaWdodFwiOlxuICAgICAgICAgICAgICB0b3RhbGhlaWdodCA9IHNpemVEYXRhKHN0cik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQga2V5OiAnXCIgKyBrZXlWYWxbMF0gKyBcIicgaW4gXFxcXGluY2x1ZGVncmFwaGljcy5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNyYyA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwidXJsXCIpLnVybDtcblxuICAgIGlmIChhbHQgPT09IFwiXCIpIHtcbiAgICAgIC8vIE5vIGFsdCBnaXZlbi4gVXNlIHRoZSBmaWxlIG5hbWUuIFN0cmlwIGF3YXkgdGhlIHBhdGguXG4gICAgICBhbHQgPSBzcmM7XG4gICAgICBhbHQgPSBhbHQucmVwbGFjZSgvXi4qW1xcXFwvXS8sICcnKTtcbiAgICAgIGFsdCA9IGFsdC5zdWJzdHJpbmcoMCwgYWx0Lmxhc3RJbmRleE9mKCcuJykpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh7XG4gICAgICBjb21tYW5kOiBcIlxcXFxpbmNsdWRlZ3JhcGhpY3NcIixcbiAgICAgIHVybDogc3JjXG4gICAgfSkpIHtcbiAgICAgIHJldHVybiBwYXJzZXIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoXCJcXFxcaW5jbHVkZWdyYXBoaWNzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluY2x1ZGVncmFwaGljc1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBhbHQ6IGFsdCxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgdG90YWxoZWlnaHQ6IHRvdGFsaGVpZ2h0LFxuICAgICAgc3JjOiBzcmNcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGhlaWdodCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAuaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB2YXIgZGVwdGggPSAwO1xuXG4gICAgaWYgKGdyb3VwLnRvdGFsaGVpZ2h0Lm51bWJlciA+IDApIHtcbiAgICAgIGRlcHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC50b3RhbGhlaWdodCwgb3B0aW9ucykgLSBoZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gMDtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB3aWR0aCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHZhciBzdHlsZSA9IHtcbiAgICAgIGhlaWdodDogbWFrZUVtKGhlaWdodCArIGRlcHRoKVxuICAgIH07XG5cbiAgICBpZiAod2lkdGggPiAwKSB7XG4gICAgICBzdHlsZS53aWR0aCA9IG1ha2VFbSh3aWR0aCk7XG4gICAgfVxuXG4gICAgaWYgKGRlcHRoID4gMCkge1xuICAgICAgc3R5bGUudmVydGljYWxBbGlnbiA9IG1ha2VFbSgtZGVwdGgpO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gbmV3IEltZyhncm91cC5zcmMsIGdyb3VwLmFsdCwgc3R5bGUpO1xuICAgIG5vZGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIG5vZGUuZGVwdGggPSBkZXB0aDtcbiAgICByZXR1cm4gbm9kZTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1nbHlwaFwiLCBbXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhbHRcIiwgZ3JvdXAuYWx0KTtcbiAgICB2YXIgaGVpZ2h0ID0gY2FsY3VsYXRlU2l6ZShncm91cC5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIHZhciBkZXB0aCA9IDA7XG5cbiAgICBpZiAoZ3JvdXAudG90YWxoZWlnaHQubnVtYmVyID4gMCkge1xuICAgICAgZGVwdGggPSBjYWxjdWxhdGVTaXplKGdyb3VwLnRvdGFsaGVpZ2h0LCBvcHRpb25zKSAtIGhlaWdodDtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwidmFsaWduXCIsIG1ha2VFbSgtZGVwdGgpKTtcbiAgICB9XG5cbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBtYWtlRW0oaGVpZ2h0ICsgZGVwdGgpKTtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB2YXIgd2lkdGggPSBjYWxjdWxhdGVTaXplKGdyb3VwLndpZHRoLCBvcHRpb25zKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgbWFrZUVtKHdpZHRoKSk7XG4gICAgfVxuXG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgZ3JvdXAuc3JjKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbi8vIEhvcml6b250YWwgc3BhY2luZyBjb21tYW5kc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwia2VyblwiLFxuICBuYW1lczogW1wiXFxcXGtlcm5cIiwgXCJcXFxcbWtlcm5cIiwgXCJcXFxcaHNraXBcIiwgXCJcXFxcbXNraXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wic2l6ZVwiXSxcbiAgICBwcmltaXRpdmU6IHRydWUsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBzaXplID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJzaXplXCIpO1xuXG4gICAgaWYgKHBhcnNlci5zZXR0aW5ncy5zdHJpY3QpIHtcbiAgICAgIHZhciBtYXRoRnVuY3Rpb24gPSBmdW5jTmFtZVsxXSA9PT0gJ20nOyAvLyBcXG1rZXJuLCBcXG1za2lwXG5cbiAgICAgIHZhciBtdVVuaXQgPSBzaXplLnZhbHVlLnVuaXQgPT09ICdtdSc7XG5cbiAgICAgIGlmIChtYXRoRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKCFtdVVuaXQpIHtcbiAgICAgICAgICBwYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dFVuaXRzXCIsIFwiTGFUZVgncyBcIiArIGZ1bmNOYW1lICsgXCIgc3VwcG9ydHMgb25seSBtdSB1bml0cywgXCIgKyAoXCJub3QgXCIgKyBzaXplLnZhbHVlLnVuaXQgKyBcIiB1bml0c1wiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyLm1vZGUgIT09IFwibWF0aFwiKSB7XG4gICAgICAgICAgcGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcIm1hdGhWc1RleHRVbml0c1wiLCBcIkxhVGVYJ3MgXCIgKyBmdW5jTmFtZSArIFwiIHdvcmtzIG9ubHkgaW4gbWF0aCBtb2RlXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAhbWF0aEZ1bmN0aW9uXG4gICAgICAgIGlmIChtdVVuaXQpIHtcbiAgICAgICAgICBwYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dFVuaXRzXCIsIFwiTGFUZVgncyBcIiArIGZ1bmNOYW1lICsgXCIgZG9lc24ndCBzdXBwb3J0IG11IHVuaXRzXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBkaW1lbnNpb246IHNpemUudmFsdWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VHbHVlKGdyb3VwLmRpbWVuc2lvbiwgb3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBkaW1lbnNpb24gPSBjYWxjdWxhdGVTaXplKGdyb3VwLmRpbWVuc2lvbiwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLlNwYWNlTm9kZShkaW1lbnNpb24pO1xuICB9XG5cbn0pO1xuXG4vLyBIb3Jpem9udGFsIG92ZXJsYXAgZnVuY3Rpb25zXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGFwXCIsXG4gIG5hbWVzOiBbXCJcXFxcbWF0aGxsYXBcIiwgXCJcXFxcbWF0aHJsYXBcIiwgXCJcXFxcbWF0aGNsYXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxhcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBhbGlnbm1lbnQ6IGZ1bmNOYW1lLnNsaWNlKDUpLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBtYXRobGxhcCwgbWF0aHJsYXAsIG1hdGhjbGFwXG4gICAgdmFyIGlubmVyO1xuXG4gICAgaWYgKGdyb3VwLmFsaWdubWVudCA9PT0gXCJjbGFwXCIpIHtcbiAgICAgIC8vIHJlZjogaHR0cHM6Ly93d3cubWF0aC5sc3UuZWR1L35hcGVybGlzL3B1YmxpY2F0aW9ucy9tYXRoY2xhcC9cbiAgICAgIGlubmVyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyldKTsgLy8gd3JhcCwgc2luY2UgQ1NTIHdpbGwgY2VudGVyIGEgLmNsYXAgPiAuaW5uZXIgPiBzcGFuXG5cbiAgICAgIGlubmVyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiaW5uZXJcIl0sIFtpbm5lcl0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbm5lciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImlubmVyXCJdLCBbYnVpbGRHcm91cCQxKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG4gICAgfVxuXG4gICAgdmFyIGZpeCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImZpeFwiXSwgW10pO1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW2dyb3VwLmFsaWdubWVudF0sIFtpbm5lciwgZml4XSwgb3B0aW9ucyk7IC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgY29ycmVjdGx5IHNldCBob3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGVcbiAgICAvLyB0d28gaXRlbXMgaW52b2x2ZWQgaW4gdGhlIGxhcC5cbiAgICAvLyBOZXh0LCB1c2UgYSBzdHJ1dCB0byBzZXQgdGhlIGhlaWdodCBvZiB0aGUgSFRNTCBib3VuZGluZyBib3guXG4gICAgLy8gT3RoZXJ3aXNlLCBhIHRhbGwgYXJndW1lbnQgbWF5IGJlIG1pc3BsYWNlZC5cbiAgICAvLyBUaGlzIGNvZGUgcmVzb2x2ZWQgaXNzdWUgIzExNTNcblxuICAgIHZhciBzdHJ1dCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cnV0XCJdKTtcbiAgICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBtYWtlRW0obm9kZS5oZWlnaHQgKyBub2RlLmRlcHRoKTtcblxuICAgIGlmIChub2RlLmRlcHRoKSB7XG4gICAgICBzdHJ1dC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1ub2RlLmRlcHRoKTtcbiAgICB9XG5cbiAgICBub2RlLmNoaWxkcmVuLnVuc2hpZnQoc3RydXQpOyAvLyBOZXh0LCBwcmV2ZW50IHZlcnRpY2FsIG1pc3BsYWNlbWVudCB3aGVuIG5leHQgdG8gc29tZXRoaW5nIHRhbGwuXG4gICAgLy8gVGhpcyBjb2RlIHJlc29sdmVzIGlzc3VlICMxMjM0XG5cbiAgICBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1widGhpbmJveFwiXSwgW25vZGVdLCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInZib3hcIl0sIFtub2RlXSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIC8vIG1hdGhsbGFwLCBtYXRocmxhcCwgbWF0aGNsYXBcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKGdyb3VwLmFsaWdubWVudCAhPT0gXCJybGFwXCIpIHtcbiAgICAgIHZhciBvZmZzZXQgPSBncm91cC5hbGlnbm1lbnQgPT09IFwibGxhcFwiID8gXCItMVwiIDogXCItMC41XCI7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBvZmZzZXQgKyBcIndpZHRoXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIwcHhcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic3R5bGluZ1wiLFxuICBuYW1lczogW1wiXFxcXChcIiwgXCIkXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBhbGxvd2VkSW5NYXRoOiBmYWxzZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBvdXRlck1vZGUgPSBwYXJzZXIubW9kZTtcbiAgICBwYXJzZXIuc3dpdGNoTW9kZShcIm1hdGhcIik7XG4gICAgdmFyIGNsb3NlID0gZnVuY05hbWUgPT09IFwiXFxcXChcIiA/IFwiXFxcXClcIiA6IFwiJFwiO1xuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgY2xvc2UpO1xuICAgIHBhcnNlci5leHBlY3QoY2xvc2UpO1xuICAgIHBhcnNlci5zd2l0Y2hNb2RlKG91dGVyTW9kZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic3R5bGluZ1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBzdHlsZTogXCJ0ZXh0XCIsXG4gICAgICBib2R5XG4gICAgfTtcbiAgfVxuXG59KTsgLy8gQ2hlY2sgZm9yIGV4dHJhIGNsb3NpbmcgbWF0aCBkZWxpbWl0ZXJzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhpcyBpcy5cbiAgbmFtZXM6IFtcIlxcXFwpXCIsIFwiXFxcXF1cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IGZhbHNlXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJNaXNtYXRjaGVkIFwiICsgY29udGV4dC5mdW5jTmFtZSk7XG4gIH1cblxufSk7XG5cbnZhciBjaG9vc2VNYXRoU3R5bGUgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgc3dpdGNoIChvcHRpb25zLnN0eWxlLnNpemUpIHtcbiAgICBjYXNlIFN0eWxlJDEuRElTUExBWS5zaXplOlxuICAgICAgcmV0dXJuIGdyb3VwLmRpc3BsYXk7XG5cbiAgICBjYXNlIFN0eWxlJDEuVEVYVC5zaXplOlxuICAgICAgcmV0dXJuIGdyb3VwLnRleHQ7XG5cbiAgICBjYXNlIFN0eWxlJDEuU0NSSVBULnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuc2NyaXB0O1xuXG4gICAgY2FzZSBTdHlsZSQxLlNDUklQVFNDUklQVC5zaXplOlxuICAgICAgcmV0dXJuIGdyb3VwLnNjcmlwdHNjcmlwdDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZ3JvdXAudGV4dDtcbiAgfVxufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1hdGhjaG9pY2VcIixcbiAgbmFtZXM6IFtcIlxcXFxtYXRoY2hvaWNlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDQsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1hdGhjaG9pY2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgZGlzcGxheTogb3JkYXJndW1lbnQoYXJnc1swXSksXG4gICAgICB0ZXh0OiBvcmRhcmd1bWVudChhcmdzWzFdKSxcbiAgICAgIHNjcmlwdDogb3JkYXJndW1lbnQoYXJnc1syXSksXG4gICAgICBzY3JpcHRzY3JpcHQ6IG9yZGFyZ3VtZW50KGFyZ3NbM10pXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBib2R5ID0gY2hvb3NlTWF0aFN0eWxlKGdyb3VwLCBvcHRpb25zKTtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShib2R5LCBvcHRpb25zLCBmYWxzZSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBib2R5ID0gY2hvb3NlTWF0aFN0eWxlKGdyb3VwLCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGJvZHksIG9wdGlvbnMpO1xuICB9XG59KTtcblxudmFyIGFzc2VtYmxlU3VwU3ViID0gKGJhc2UsIHN1cEdyb3VwLCBzdWJHcm91cCwgb3B0aW9ucywgc3R5bGUsIHNsYW50LCBiYXNlU2hpZnQpID0+IHtcbiAgYmFzZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbYmFzZV0pO1xuICB2YXIgc3ViSXNTaW5nbGVDaGFyYWN0ZXIgPSBzdWJHcm91cCAmJiB1dGlscy5pc0NoYXJhY3RlckJveChzdWJHcm91cCk7XG4gIHZhciBzdWI7XG4gIHZhciBzdXA7IC8vIFdlIG1hbnVhbGx5IGhhdmUgdG8gaGFuZGxlIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIFRoaXMsXG4gIC8vIGFzaWRlIGZyb20gdGhlIGtlcm4gY2FsY3VsYXRpb25zLCBpcyBjb3BpZWQgZnJvbSBzdXBzdWIuXG5cbiAgaWYgKHN1cEdyb3VwKSB7XG4gICAgdmFyIGVsZW0gPSBidWlsZEdyb3VwJDEoc3VwR3JvdXAsIG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUuc3VwKCkpLCBvcHRpb25zKTtcbiAgICBzdXAgPSB7XG4gICAgICBlbGVtLFxuICAgICAga2VybjogTWF0aC5tYXgob3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzEsIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmczIC0gZWxlbS5kZXB0aClcbiAgICB9O1xuICB9XG5cbiAgaWYgKHN1Ykdyb3VwKSB7XG4gICAgdmFyIF9lbGVtID0gYnVpbGRHcm91cCQxKHN1Ykdyb3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1YigpKSwgb3B0aW9ucyk7XG5cbiAgICBzdWIgPSB7XG4gICAgICBlbGVtOiBfZWxlbSxcbiAgICAgIGtlcm46IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcyLCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNCAtIF9lbGVtLmhlaWdodClcbiAgICB9O1xuICB9IC8vIEJ1aWxkIHRoZSBmaW5hbCBncm91cCBhcyBhIHZsaXN0IG9mIHRoZSBwb3NzaWJsZSBzdWJzY3JpcHQsIGJhc2UsXG4gIC8vIGFuZCBwb3NzaWJsZSBzdXBlcnNjcmlwdC5cblxuXG4gIHZhciBmaW5hbEdyb3VwO1xuXG4gIGlmIChzdXAgJiYgc3ViKSB7XG4gICAgdmFyIGJvdHRvbSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1ICsgc3ViLmVsZW0uaGVpZ2h0ICsgc3ViLmVsZW0uZGVwdGggKyBzdWIua2VybiArIGJhc2UuZGVwdGggKyBiYXNlU2hpZnQ7XG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGJvdHRvbSxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Yi5lbGVtLFxuICAgICAgICBtYXJnaW5MZWZ0OiBtYWtlRW0oLXNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc3ViLmtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1cC5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdXAuZWxlbSxcbiAgICAgICAgbWFyZ2luTGVmdDogbWFrZUVtKHNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoc3ViKSB7XG4gICAgdmFyIHRvcCA9IGJhc2UuaGVpZ2h0IC0gYmFzZVNoaWZ0OyAvLyBTaGlmdCB0aGUgbGltaXRzIGJ5IHRoZSBzbGFudCBvZiB0aGUgc3ltYm9sLiBOb3RlXG4gICAgLy8gdGhhdCB3ZSBhcmUgc3VwcG9zZWQgdG8gc2hpZnQgdGhlIGxpbWl0cyBieSAxLzIgb2YgdGhlIHNsYW50LFxuICAgIC8vIGJ1dCBzaW5jZSB3ZSBhcmUgY2VudGVyaW5nIHRoZSBsaW1pdHMgYWRkaW5nIGEgZnVsbCBzbGFudCBvZlxuICAgIC8vIG1hcmdpbiB3aWxsIHNoaWZ0IGJ5IDEvMiB0aGF0LlxuXG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwidG9wXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IHRvcCxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Yi5lbGVtLFxuICAgICAgICBtYXJnaW5MZWZ0OiBtYWtlRW0oLXNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc3ViLmtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoc3VwKSB7XG4gICAgdmFyIF9ib3R0b20gPSBiYXNlLmRlcHRoICsgYmFzZVNoaWZ0O1xuXG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IF9ib3R0b20sXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1cC5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdXAuZWxlbSxcbiAgICAgICAgbWFyZ2luTGVmdDogbWFrZUVtKHNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBjYXNlIHByb2JhYmx5IHNob3VsZG4ndCBvY2N1ciAodGhpcyB3b3VsZCBtZWFuIHRoZVxuICAgIC8vIHN1cHN1YiB3YXMgc2VuZGluZyB1cyBhIGdyb3VwIHdpdGggbm8gc3VwZXJzY3JpcHQgb3JcbiAgICAvLyBzdWJzY3JpcHQpIGJ1dCBiZSBzYWZlLlxuICAgIHJldHVybiBiYXNlO1xuICB9XG5cbiAgdmFyIHBhcnRzID0gW2ZpbmFsR3JvdXBdO1xuXG4gIGlmIChzdWIgJiYgc2xhbnQgIT09IDAgJiYgIXN1YklzU2luZ2xlQ2hhcmFjdGVyKSB7XG4gICAgLy8gQSBuZWdhdGl2ZSBtYXJnaW4tbGVmdCB3YXMgYXBwbGllZCB0byB0aGUgbG93ZXIgbGltaXQuXG4gICAgLy8gQXZvaWQgYW4gb3ZlcmxhcCBieSBwbGFjaW5nIGEgc3BhY2VyIG9uIHRoZSBsZWZ0IG9uIHRoZSBncm91cC5cbiAgICB2YXIgc3BhY2VyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXNwYWNlXCJdLCBbXSwgb3B0aW9ucyk7XG4gICAgc3BhY2VyLnN0eWxlLm1hcmdpblJpZ2h0ID0gbWFrZUVtKHNsYW50KTtcbiAgICBwYXJ0cy51bnNoaWZ0KHNwYWNlcik7XG4gIH1cblxuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCIsIFwib3AtbGltaXRzXCJdLCBwYXJ0cywgb3B0aW9ucyk7XG59O1xuXG4vLyBMaW1pdHMsIHN5bWJvbHNcbi8vIE1vc3Qgb3BlcmF0b3JzIGhhdmUgYSBsYXJnZSBzdWNjZXNzb3Igc3ltYm9sLCBidXQgdGhlc2UgZG9uJ3QuXG52YXIgbm9TdWNjZXNzb3IgPSBbXCJcXFxcc21hbGxpbnRcIl07IC8vIE5PVEU6IFVubGlrZSBtb3N0IGBodG1sQnVpbGRlcmBzLCB0aGlzIG9uZSBoYW5kbGVzIG5vdCBvbmx5IFwib3BcIiwgYnV0IGFsc29cbi8vIFwic3Vwc3ViXCIgc2luY2Ugc29tZSBvZiB0aGVtIChsaWtlIFxcaW50KSBjYW4gYWZmZWN0IHN1cGVyL3N1YnNjcmlwdGluZy5cblxudmFyIGh0bWxCdWlsZGVyJDIgPSAoZ3JwLCBvcHRpb25zKSA9PiB7XG4gIC8vIE9wZXJhdG9ycyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLTQ0NCwgcnVsZSAxMyhhKS5cbiAgdmFyIHN1cEdyb3VwO1xuICB2YXIgc3ViR3JvdXA7XG4gIHZhciBoYXNMaW1pdHMgPSBmYWxzZTtcbiAgdmFyIGdyb3VwO1xuXG4gIGlmIChncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIHdlIGhhdmUgbGltaXRzLCBzdXBzdWIgd2lsbCBwYXNzIHVzIGl0cyBncm91cCB0byBoYW5kbGUuIFB1bGxcbiAgICAvLyBvdXQgdGhlIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgYW5kIHNldCB0aGUgZ3JvdXAgdG8gdGhlIG9wIGluXG4gICAgLy8gaXRzIGJhc2UuXG4gICAgc3VwR3JvdXAgPSBncnAuc3VwO1xuICAgIHN1Ykdyb3VwID0gZ3JwLnN1YjtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycC5iYXNlLCBcIm9wXCIpO1xuICAgIGhhc0xpbWl0cyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwib3BcIik7XG4gIH1cblxuICB2YXIgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICB2YXIgbGFyZ2UgPSBmYWxzZTtcblxuICBpZiAoc3R5bGUuc2l6ZSA9PT0gU3R5bGUkMS5ESVNQTEFZLnNpemUgJiYgZ3JvdXAuc3ltYm9sICYmICF1dGlscy5jb250YWlucyhub1N1Y2Nlc3NvciwgZ3JvdXAubmFtZSkpIHtcbiAgICAvLyBNb3N0IHN5bWJvbCBvcGVyYXRvcnMgZ2V0IGxhcmdlciBpbiBkaXNwbGF5c3R5bGUgKHJ1bGUgMTMpXG4gICAgbGFyZ2UgPSB0cnVlO1xuICB9XG5cbiAgdmFyIGJhc2U7XG5cbiAgaWYgKGdyb3VwLnN5bWJvbCkge1xuICAgIC8vIElmIHRoaXMgaXMgYSBzeW1ib2wsIGNyZWF0ZSB0aGUgc3ltYm9sLlxuICAgIHZhciBmb250TmFtZSA9IGxhcmdlID8gXCJTaXplMi1SZWd1bGFyXCIgOiBcIlNpemUxLVJlZ3VsYXJcIjtcbiAgICB2YXIgc3Rhc2ggPSBcIlwiO1xuXG4gICAgaWYgKGdyb3VwLm5hbWUgPT09IFwiXFxcXG9paW50XCIgfHwgZ3JvdXAubmFtZSA9PT0gXCJcXFxcb2lpaW50XCIpIHtcbiAgICAgIC8vIE5vIGZvbnQgZ2x5cGhzIHlldCwgc28gdXNlIGEgZ2x5cGggdy9vIHRoZSBvdmFsLlxuICAgICAgLy8gVE9ETzogV2hlbiBmb250IGdseXBocyBhcmUgYXZhaWxhYmxlLCBkZWxldGUgdGhpcyBjb2RlLlxuICAgICAgc3Rhc2ggPSBncm91cC5uYW1lLnNsaWNlKDEpO1xuICAgICAgZ3JvdXAubmFtZSA9IHN0YXNoID09PSBcIm9paW50XCIgPyBcIlxcXFxpaW50XCIgOiBcIlxcXFxpaWludFwiO1xuICAgIH1cblxuICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3ltYm9sKGdyb3VwLm5hbWUsIGZvbnROYW1lLCBcIm1hdGhcIiwgb3B0aW9ucywgW1wibW9wXCIsIFwib3Atc3ltYm9sXCIsIGxhcmdlID8gXCJsYXJnZS1vcFwiIDogXCJzbWFsbC1vcFwiXSk7XG5cbiAgICBpZiAoc3Rhc2gubGVuZ3RoID4gMCkge1xuICAgICAgLy8gV2UncmUgaW4gXFxvaWludCBvciBcXG9paWludC4gT3ZlcmxheSB0aGUgb3ZhbC5cbiAgICAgIC8vIFRPRE86IFdoZW4gZm9udCBnbHlwaHMgYXJlIGF2YWlsYWJsZSwgZGVsZXRlIHRoaXMgY29kZS5cbiAgICAgIHZhciBpdGFsaWMgPSBiYXNlLml0YWxpYztcbiAgICAgIHZhciBvdmFsID0gYnVpbGRDb21tb24uc3RhdGljU3ZnKHN0YXNoICsgXCJTaXplXCIgKyAobGFyZ2UgPyBcIjJcIiA6IFwiMVwiKSwgb3B0aW9ucyk7XG4gICAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBiYXNlLFxuICAgICAgICAgIHNoaWZ0OiAwXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBvdmFsLFxuICAgICAgICAgIHNoaWZ0OiBsYXJnZSA/IDAuMDggOiAwXG4gICAgICAgIH1dXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICAgIGdyb3VwLm5hbWUgPSBcIlxcXFxcIiArIHN0YXNoO1xuICAgICAgYmFzZS5jbGFzc2VzLnVuc2hpZnQoXCJtb3BcIik7IC8vICRGbG93Rml4TWVcblxuICAgICAgYmFzZS5pdGFsaWMgPSBpdGFsaWM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLmJvZHkpIHtcbiAgICAvLyBJZiB0aGlzIGlzIGEgbGlzdCwgY29tcG9zZSB0aGF0IGxpc3QuXG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSk7XG5cbiAgICBpZiAoaW5uZXIubGVuZ3RoID09PSAxICYmIGlubmVyWzBdIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgYmFzZSA9IGlubmVyWzBdO1xuICAgICAgYmFzZS5jbGFzc2VzWzBdID0gXCJtb3BcIjsgLy8gcmVwbGFjZSBvbGQgbWNsYXNzXG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIGlubmVyLCBvcHRpb25zKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlLCB0aGlzIGlzIGEgdGV4dCBvcGVyYXRvci4gQnVpbGQgdGhlIHRleHQgZnJvbSB0aGVcbiAgICAvLyBvcGVyYXRvcidzIG5hbWUuXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBncm91cC5uYW1lLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvdXRwdXQucHVzaChidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLm5hbWVbaV0sIGdyb3VwLm1vZGUsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBvdXRwdXQsIG9wdGlvbnMpO1xuICB9IC8vIElmIGNvbnRlbnQgb2Ygb3AgaXMgYSBzaW5nbGUgc3ltYm9sLCBzaGlmdCBpdCB2ZXJ0aWNhbGx5LlxuXG5cbiAgdmFyIGJhc2VTaGlmdCA9IDA7XG4gIHZhciBzbGFudCA9IDA7XG5cbiAgaWYgKChiYXNlIGluc3RhbmNlb2YgU3ltYm9sTm9kZSB8fCBncm91cC5uYW1lID09PSBcIlxcXFxvaWludFwiIHx8IGdyb3VwLm5hbWUgPT09IFwiXFxcXG9paWludFwiKSAmJiAhZ3JvdXAuc3VwcHJlc3NCYXNlU2hpZnQpIHtcbiAgICAvLyBXZSBzdXBwcmVzcyB0aGUgc2hpZnQgb2YgdGhlIGJhc2Ugb2YgXFxvdmVyc2V0IGFuZCBcXHVuZGVyc2V0LiBPdGhlcndpc2UsXG4gICAgLy8gc2hpZnQgdGhlIHN5bWJvbCBzbyBpdHMgY2VudGVyIGxpZXMgb24gdGhlIGF4aXMgKHJ1bGUgMTMpLiBJdFxuICAgIC8vIGFwcGVhcnMgdGhhdCBvdXIgZm9udHMgaGF2ZSB0aGUgY2VudGVycyBvZiB0aGUgc3ltYm9scyBhbHJlYWR5XG4gICAgLy8gYWxtb3N0IG9uIHRoZSBheGlzLCBzbyB0aGVzZSBudW1iZXJzIGFyZSB2ZXJ5IHNtYWxsLiBOb3RlIHdlXG4gICAgLy8gZG9uJ3QgYWN0dWFsbHkgYXBwbHkgdGhpcyBoZXJlLCBidXQgaW5zdGVhZCBpdCBpcyB1c2VkIGVpdGhlciBpblxuICAgIC8vIHRoZSB2bGlzdCBjcmVhdGlvbiBvciBzZXBhcmF0ZWx5IHdoZW4gdGhlcmUgYXJlIG5vIGxpbWl0cy5cbiAgICBiYXNlU2hpZnQgPSAoYmFzZS5oZWlnaHQgLSBiYXNlLmRlcHRoKSAvIDIgLSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDsgLy8gVGhlIHNsYW50IG9mIHRoZSBzeW1ib2wgaXMganVzdCBpdHMgaXRhbGljIGNvcnJlY3Rpb24uXG4gICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgc2xhbnQgPSBiYXNlLml0YWxpYztcbiAgfVxuXG4gIGlmIChoYXNMaW1pdHMpIHtcbiAgICByZXR1cm4gYXNzZW1ibGVTdXBTdWIoYmFzZSwgc3VwR3JvdXAsIHN1Ykdyb3VwLCBvcHRpb25zLCBzdHlsZSwgc2xhbnQsIGJhc2VTaGlmdCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJhc2VTaGlmdCkge1xuICAgICAgYmFzZS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgICAgIGJhc2Uuc3R5bGUudG9wID0gbWFrZUVtKGJhc2VTaGlmdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbn07XG5cbnZhciBtYXRobWxCdWlsZGVyJDEgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgdmFyIG5vZGU7XG5cbiAgaWYgKGdyb3VwLnN5bWJvbCkge1xuICAgIC8vIFRoaXMgaXMgYSBzeW1ib2wuIEp1c3QgYWRkIHRoZSBzeW1ib2wuXG4gICAgbm9kZSA9IG5ldyBNYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC5uYW1lLCBncm91cC5tb2RlKV0pO1xuXG4gICAgaWYgKHV0aWxzLmNvbnRhaW5zKG5vU3VjY2Vzc29yLCBncm91cC5uYW1lKSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXJnZW9wXCIsIFwiZmFsc2VcIik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLmJvZHkpIHtcbiAgICAvLyBUaGlzIGlzIGFuIG9wZXJhdG9yIHdpdGggY2hpbGRyZW4uIEFkZCB0aGVtLlxuICAgIG5vZGUgPSBuZXcgTWF0aE5vZGUoXCJtb1wiLCBidWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYSB0ZXh0IG9wZXJhdG9yLiBBZGQgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGZyb20gdGhlXG4gICAgLy8gb3BlcmF0b3IncyBuYW1lLlxuICAgIG5vZGUgPSBuZXcgTWF0aE5vZGUoXCJtaVwiLCBbbmV3IFRleHROb2RlKGdyb3VwLm5hbWUuc2xpY2UoMSkpXSk7IC8vIEFwcGVuZCBhbiA8bW8+JkFwcGx5RnVuY3Rpb247PC9tbz4uXG4gICAgLy8gcmVmOiBodHRwczovL3d3dy53My5vcmcvVFIvUkVDLU1hdGhNTC9jaGFwM18yLmh0bWwjc2VjMy4yLjRcblxuICAgIHZhciBvcGVyYXRvciA9IG5ldyBNYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChcIlxcdTIwNjFcIiwgXCJ0ZXh0XCIpXSk7XG5cbiAgICBpZiAoZ3JvdXAucGFyZW50SXNTdXBTdWIpIHtcbiAgICAgIG5vZGUgPSBuZXcgTWF0aE5vZGUoXCJtcm93XCIsIFtub2RlLCBvcGVyYXRvcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3RG9jdW1lbnRGcmFnbWVudChbbm9kZSwgb3BlcmF0b3JdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBzaW5nbGVDaGFyQmlnT3BzID0ge1xuICBcIlxcdTIyMEZcIjogXCJcXFxccHJvZFwiLFxuICBcIlxcdTIyMTBcIjogXCJcXFxcY29wcm9kXCIsXG4gIFwiXFx1MjIxMVwiOiBcIlxcXFxzdW1cIixcbiAgXCJcXHUyMmMwXCI6IFwiXFxcXGJpZ3dlZGdlXCIsXG4gIFwiXFx1MjJjMVwiOiBcIlxcXFxiaWd2ZWVcIixcbiAgXCJcXHUyMmMyXCI6IFwiXFxcXGJpZ2NhcFwiLFxuICBcIlxcdTIyYzNcIjogXCJcXFxcYmlnY3VwXCIsXG4gIFwiXFx1MmEwMFwiOiBcIlxcXFxiaWdvZG90XCIsXG4gIFwiXFx1MmEwMVwiOiBcIlxcXFxiaWdvcGx1c1wiLFxuICBcIlxcdTJhMDJcIjogXCJcXFxcYmlnb3RpbWVzXCIsXG4gIFwiXFx1MmEwNFwiOiBcIlxcXFxiaWd1cGx1c1wiLFxuICBcIlxcdTJhMDZcIjogXCJcXFxcYmlnc3FjdXBcIlxufTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGNvcHJvZFwiLCBcIlxcXFxiaWd2ZWVcIiwgXCJcXFxcYmlnd2VkZ2VcIiwgXCJcXFxcYmlndXBsdXNcIiwgXCJcXFxcYmlnY2FwXCIsIFwiXFxcXGJpZ2N1cFwiLCBcIlxcXFxpbnRvcFwiLCBcIlxcXFxwcm9kXCIsIFwiXFxcXHN1bVwiLCBcIlxcXFxiaWdvdGltZXNcIiwgXCJcXFxcYmlnb3BsdXNcIiwgXCJcXFxcYmlnb2RvdFwiLCBcIlxcXFxiaWdzcWN1cFwiLCBcIlxcXFxzbWFsbGludFwiLCBcIlxcdTIyMEZcIiwgXCJcXHUyMjEwXCIsIFwiXFx1MjIxMVwiLCBcIlxcdTIyYzBcIiwgXCJcXHUyMmMxXCIsIFwiXFx1MjJjMlwiLCBcIlxcdTIyYzNcIiwgXCJcXHUyYTAwXCIsIFwiXFx1MmEwMVwiLCBcIlxcdTJhMDJcIiwgXCJcXHUyYTA0XCIsIFwiXFx1MmEwNlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGZOYW1lID0gZnVuY05hbWU7XG5cbiAgICBpZiAoZk5hbWUubGVuZ3RoID09PSAxKSB7XG4gICAgICBmTmFtZSA9IHNpbmdsZUNoYXJCaWdPcHNbZk5hbWVdO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogdHJ1ZSxcbiAgICAgIHBhcmVudElzU3VwU3ViOiBmYWxzZSxcbiAgICAgIHN5bWJvbDogdHJ1ZSxcbiAgICAgIG5hbWU6IGZOYW1lXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMVxufSk7IC8vIE5vdGU6IGNhbGxpbmcgZGVmaW5lRnVuY3Rpb24gd2l0aCBhIHR5cGUgdGhhdCdzIGFscmVhZHkgYmVlbiBkZWZpbmVkIG9ubHlcbi8vIHdvcmtzIGJlY2F1c2UgdGhlIHNhbWUgaHRtbEJ1aWxkZXIgYW5kIG1hdGhtbEJ1aWxkZXIgYXJlIGJlaW5nIHVzZWQuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXG1hdGhvcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZjIsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMVxufSk7IC8vIFRoZXJlIGFyZSAyIGZsYWdzIGZvciBvcGVyYXRvcnM7IHdoZXRoZXIgdGhleSBwcm9kdWNlIGxpbWl0cyBpblxuLy8gZGlzcGxheXN0eWxlLCBhbmQgd2hldGhlciB0aGV5IGFyZSBzeW1ib2xzIGFuZCBzaG91bGQgZ3JvdyBpblxuLy8gZGlzcGxheXN0eWxlLiBUaGVzZSBmb3VyIGdyb3VwcyBjb3ZlciB0aGUgZm91ciBwb3NzaWJsZSBjaG9pY2VzLlxuXG52YXIgc2luZ2xlQ2hhckludGVncmFscyA9IHtcbiAgXCJcXHUyMjJiXCI6IFwiXFxcXGludFwiLFxuICBcIlxcdTIyMmNcIjogXCJcXFxcaWludFwiLFxuICBcIlxcdTIyMmRcIjogXCJcXFxcaWlpbnRcIixcbiAgXCJcXHUyMjJlXCI6IFwiXFxcXG9pbnRcIixcbiAgXCJcXHUyMjJmXCI6IFwiXFxcXG9paW50XCIsXG4gIFwiXFx1MjIzMFwiOiBcIlxcXFxvaWlpbnRcIlxufTsgLy8gTm8gbGltaXRzLCBub3Qgc3ltYm9sc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3BcIixcbiAgbmFtZXM6IFtcIlxcXFxhcmNzaW5cIiwgXCJcXFxcYXJjY29zXCIsIFwiXFxcXGFyY3RhblwiLCBcIlxcXFxhcmN0Z1wiLCBcIlxcXFxhcmNjdGdcIiwgXCJcXFxcYXJnXCIsIFwiXFxcXGNoXCIsIFwiXFxcXGNvc1wiLCBcIlxcXFxjb3NlY1wiLCBcIlxcXFxjb3NoXCIsIFwiXFxcXGNvdFwiLCBcIlxcXFxjb3RnXCIsIFwiXFxcXGNvdGhcIiwgXCJcXFxcY3NjXCIsIFwiXFxcXGN0Z1wiLCBcIlxcXFxjdGhcIiwgXCJcXFxcZGVnXCIsIFwiXFxcXGRpbVwiLCBcIlxcXFxleHBcIiwgXCJcXFxcaG9tXCIsIFwiXFxcXGtlclwiLCBcIlxcXFxsZ1wiLCBcIlxcXFxsblwiLCBcIlxcXFxsb2dcIiwgXCJcXFxcc2VjXCIsIFwiXFxcXHNpblwiLCBcIlxcXFxzaW5oXCIsIFwiXFxcXHNoXCIsIFwiXFxcXHRhblwiLCBcIlxcXFx0YW5oXCIsIFwiXFxcXHRnXCIsIFwiXFxcXHRoXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWYzO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogZmFsc2UsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IGZhbHNlLFxuICAgICAgbmFtZTogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQyLFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDFcbn0pOyAvLyBMaW1pdHMsIG5vdCBzeW1ib2xzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGRldFwiLCBcIlxcXFxnY2RcIiwgXCJcXFxcaW5mXCIsIFwiXFxcXGxpbVwiLCBcIlxcXFxtYXhcIiwgXCJcXFxcbWluXCIsIFwiXFxcXFByXCIsIFwiXFxcXHN1cFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmNCkge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmNDtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IHRydWUsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IGZhbHNlLFxuICAgICAgbmFtZTogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQyLFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDFcbn0pOyAvLyBObyBsaW1pdHMsIHN5bWJvbHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm9wXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW50XCIsIFwiXFxcXGlpbnRcIiwgXCJcXFxcaWlpbnRcIiwgXCJcXFxcb2ludFwiLCBcIlxcXFxvaWludFwiLCBcIlxcXFxvaWlpbnRcIiwgXCJcXHUyMjJiXCIsIFwiXFx1MjIyY1wiLCBcIlxcdTIyMmRcIiwgXCJcXHUyMjJlXCIsIFwiXFx1MjIyZlwiLCBcIlxcdTIyMzBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjUpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjU7XG4gICAgdmFyIGZOYW1lID0gZnVuY05hbWU7XG5cbiAgICBpZiAoZk5hbWUubGVuZ3RoID09PSAxKSB7XG4gICAgICBmTmFtZSA9IHNpbmdsZUNoYXJJbnRlZ3JhbHNbZk5hbWVdO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogZmFsc2UsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IHRydWUsXG4gICAgICBuYW1lOiBmTmFtZVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMVxufSk7XG5cbi8vIE5PVEU6IFVubGlrZSBtb3N0IGBodG1sQnVpbGRlcmBzLCB0aGlzIG9uZSBoYW5kbGVzIG5vdCBvbmx5XG4vLyBcIm9wZXJhdG9ybmFtZVwiLCBidXQgYWxzbyAgXCJzdXBzdWJcIiBzaW5jZSBcXG9wZXJhdG9ybmFtZSogY2FuXG4vLyBhZmZlY3Qgc3VwZXIvc3Vic2NyaXB0aW5nLlxudmFyIGh0bWxCdWlsZGVyJDEgPSAoZ3JwLCBvcHRpb25zKSA9PiB7XG4gIC8vIE9wZXJhdG9ycyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLTQ0NCwgcnVsZSAxMyhhKS5cbiAgdmFyIHN1cEdyb3VwO1xuICB2YXIgc3ViR3JvdXA7XG4gIHZhciBoYXNMaW1pdHMgPSBmYWxzZTtcbiAgdmFyIGdyb3VwO1xuXG4gIGlmIChncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIHdlIGhhdmUgbGltaXRzLCBzdXBzdWIgd2lsbCBwYXNzIHVzIGl0cyBncm91cCB0byBoYW5kbGUuIFB1bGxcbiAgICAvLyBvdXQgdGhlIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgYW5kIHNldCB0aGUgZ3JvdXAgdG8gdGhlIG9wIGluXG4gICAgLy8gaXRzIGJhc2UuXG4gICAgc3VwR3JvdXAgPSBncnAuc3VwO1xuICAgIHN1Ykdyb3VwID0gZ3JwLnN1YjtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycC5iYXNlLCBcIm9wZXJhdG9ybmFtZVwiKTtcbiAgICBoYXNMaW1pdHMgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoZ3JwLCBcIm9wZXJhdG9ybmFtZVwiKTtcbiAgfVxuXG4gIHZhciBiYXNlO1xuXG4gIGlmIChncm91cC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICB2YXIgYm9keSA9IGdyb3VwLmJvZHkubWFwKGNoaWxkID0+IHtcbiAgICAgIC8vICRGbG93Rml4TWU6IENoZWNrIGlmIHRoZSBub2RlIGhhcyBhIHN0cmluZyBgdGV4dGAgcHJvcGVydHkuXG4gICAgICB2YXIgY2hpbGRUZXh0ID0gY2hpbGQudGV4dDtcblxuICAgICAgaWYgKHR5cGVvZiBjaGlsZFRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICBtb2RlOiBjaGlsZC5tb2RlLFxuICAgICAgICAgIHRleHQ6IGNoaWxkVGV4dFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH0pOyAvLyBDb25zb2xpZGF0ZSBmdW5jdGlvbiBuYW1lcyBpbnRvIHN5bWJvbCBjaGFyYWN0ZXJzLlxuXG4gICAgdmFyIGV4cHJlc3Npb24gPSBidWlsZEV4cHJlc3Npb24kMShib2R5LCBvcHRpb25zLndpdGhGb250KFwibWF0aHJtXCIpLCB0cnVlKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gZXhwcmVzc2lvbltpXTtcblxuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgICAvLyBQZXIgYW1zb3BuIHBhY2thZ2UsXG4gICAgICAgIC8vIGNoYW5nZSBtaW51cyB0byBoeXBoZW4gYW5kIFxcYXN0IHRvIGFzdGVyaXNrXG4gICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnJlcGxhY2UoL1xcdTIyMTIvLCBcIi1cIikucmVwbGFjZSgvXFx1MjIxNy8sIFwiKlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBleHByZXNzaW9uLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBbXSwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoaGFzTGltaXRzKSB7XG4gICAgcmV0dXJuIGFzc2VtYmxlU3VwU3ViKGJhc2UsIHN1cEdyb3VwLCBzdWJHcm91cCwgb3B0aW9ucywgb3B0aW9ucy5zdHlsZSwgMCwgMCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbn07XG5cbnZhciBtYXRobWxCdWlsZGVyID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIC8vIFRoZSBzdGVwcyB0YWtlbiBoZXJlIGFyZSBzaW1pbGFyIHRvIHRoZSBodG1sIHZlcnNpb24uXG4gIHZhciBleHByZXNzaW9uID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aEZvbnQoXCJtYXRocm1cIikpOyAvLyBJcyBleHByZXNzaW9uIGEgc3RyaW5nIG9yIGhhcyBpdCBzb21ldGhpbmcgbGlrZSBhIGZyYWN0aW9uP1xuXG4gIHZhciBpc0FsbFN0cmluZyA9IHRydWU7IC8vIGRlZmF1bHRcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IGV4cHJlc3Npb25baV07XG5cbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIG1hdGhNTFRyZWUuU3BhY2VOb2RlKSA7IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLk1hdGhOb2RlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlIFwibWlcIjpcbiAgICAgICAgY2FzZSBcIm1uXCI6XG4gICAgICAgIGNhc2UgXCJtc1wiOlxuICAgICAgICBjYXNlIFwibXNwYWNlXCI6XG4gICAgICAgIGNhc2UgXCJtdGV4dFwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBEbyBub3RoaW5nIHlldC5cblxuICAgICAgICBjYXNlIFwibW9cIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgY2hpbGQgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLlRleHROb2RlKSB7XG4gICAgICAgICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnJlcGxhY2UoL1xcdTIyMTIvLCBcIi1cIikucmVwbGFjZSgvXFx1MjIxNy8sIFwiKlwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQWxsU3RyaW5nKSB7XG4gICAgLy8gV3JpdGUgYSBzaW5nbGUgVGV4dE5vZGUgaW5zdGVhZCBvZiBtdWx0aXBsZSBuZXN0ZWQgdGFncy5cbiAgICB2YXIgd29yZCA9IGV4cHJlc3Npb24ubWFwKG5vZGUgPT4gbm9kZS50b1RleHQoKSkuam9pbihcIlwiKTtcbiAgICBleHByZXNzaW9uID0gW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKHdvcmQpXTtcbiAgfVxuXG4gIHZhciBpZGVudGlmaWVyID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBleHByZXNzaW9uKTtcbiAgaWRlbnRpZmllci5zZXRBdHRyaWJ1dGUoXCJtYXRodmFyaWFudFwiLCBcIm5vcm1hbFwiKTsgLy8gXFx1MjA2MSBpcyB0aGUgc2FtZSBhcyAmQXBwbHlGdW5jdGlvbjtcbiAgLy8gcmVmOiBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2NoYXJzZXRzL3JlZl9odG1sX2VudGl0aWVzX2EuYXNwXG5cbiAgdmFyIG9wZXJhdG9yID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbWFrZVRleHQoXCJcXHUyMDYxXCIsIFwidGV4dFwiKV0pO1xuXG4gIGlmIChncm91cC5wYXJlbnRJc1N1cFN1Yikge1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb3dcIiwgW2lkZW50aWZpZXIsIG9wZXJhdG9yXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hdGhNTFRyZWUubmV3RG9jdW1lbnRGcmFnbWVudChbaWRlbnRpZmllciwgb3BlcmF0b3JdKTtcbiAgfVxufTsgLy8gXFxvcGVyYXRvcm5hbWVcbi8vIGFtc29wbi5kdHg6IFxcbWF0aG9weyMxXFxrZXJuXFx6QFxcb3BlcmF0b3JAZm9udCMzfVxcbmV3bWNvZGVzQFxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgbmFtZXM6IFtcIlxcXFxvcGVyYXRvcm5hbWVAXCIsIFwiXFxcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHNcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogb3JkYXJndW1lbnQoYm9keSksXG4gICAgICBhbHdheXNIYW5kbGVTdXBTdWI6IGZ1bmNOYW1lID09PSBcIlxcXFxvcGVyYXRvcm5hbWV3aXRobGltaXRzXCIsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDEsXG4gIG1hdGhtbEJ1aWxkZXJcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcb3BlcmF0b3JuYW1lXCIsIFwiXFxcXEBpZnN0YXJcXFxcb3BlcmF0b3JuYW1ld2l0aGxpbWl0c1xcXFxvcGVyYXRvcm5hbWVAXCIpO1xuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJvcmRncm91cFwiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgaWYgKGdyb3VwLnNlbWlzaW1wbGUpIHtcbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgZmFsc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSksIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3ZlcmxpbmVcIixcbiAgbmFtZXM6IFtcIlxcXFxvdmVybGluZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvdmVybGluZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5XG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIE92ZXJsaW5lcyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZyA0NDMsIFJ1bGUgOS5cbiAgICAvLyBCdWlsZCB0aGUgaW5uZXIgZ3JvdXAgaW4gdGhlIGNyYW1wZWQgc3R5bGUuXG4gICAgdmFyIGlubmVyR3JvdXAgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7IC8vIENyZWF0ZSB0aGUgbGluZSBhYm92ZSB0aGUgYm9keVxuXG4gICAgdmFyIGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJvdmVybGluZS1saW5lXCIsIG9wdGlvbnMpOyAvLyBHZW5lcmF0ZSB0aGUgdmxpc3QsIHdpdGggdGhlIGFwcHJvcHJpYXRlIGtlcm5zXG5cbiAgICB2YXIgZGVmYXVsdFJ1bGVUaGlja25lc3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gICAgdmFyIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyR3JvdXBcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IDMgKiBkZWZhdWx0UnVsZVRoaWNrbmVzc1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbGluZVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJvdmVybGluZVwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBvcGVyYXRvciA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKFwiXFx1MjAzZVwiKV0pO1xuICAgIG9wZXJhdG9yLnNldEF0dHJpYnV0ZShcInN0cmV0Y2h5XCIsIFwidHJ1ZVwiKTtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyksIG9wZXJhdG9yXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnRcIiwgXCJ0cnVlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwicGhhbnRvbVwiLFxuICBuYW1lczogW1wiXFxcXHBoYW50b21cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkRXhwcmVzc2lvbiQxKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aFBoYW50b20oKSwgZmFsc2UpOyAvLyBcXHBoYW50b20gaXNuJ3Qgc3VwcG9zZWQgdG8gYWZmZWN0IHRoZSBlbGVtZW50cyBpdCBjb250YWlucy5cbiAgICAvLyBTZWUgXCJjb2xvclwiIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMpO1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1waGFudG9tXCIsIGlubmVyKTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFxocGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYyLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaHBoYW50b21cIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbYnVpbGRHcm91cCQxKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aFBoYW50b20oKSldKTtcbiAgICBub2RlLmhlaWdodCA9IDA7XG4gICAgbm9kZS5kZXB0aCA9IDA7XG5cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5vZGUuY2hpbGRyZW5baV0uaGVpZ2h0ID0gMDtcbiAgICAgICAgbm9kZS5jaGlsZHJlbltpXS5kZXB0aCA9IDA7XG4gICAgICB9XG4gICAgfSAvLyBTZWUgc21hc2ggZm9yIGNvbW1lbnQgcmU6IHVzZSBvZiBtYWtlVkxpc3RcblxuXG4gICAgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBub2RlXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpOyAvLyBGb3Igc3BhY2luZywgVGVYIHRyZWF0cyBcXHNtYXNoIGFzIGEgbWF0aCBncm91cCAoc2FtZSBzcGFjaW5nIGFzIG9yZCkuXG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgW25vZGVdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKG9yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgXCIwcHhcIik7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidnBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFx2cGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYzLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMztcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwidnBoYW50b21cIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJpbm5lclwiXSwgW2J1aWxkR3JvdXAkMShncm91cC5ib2R5LCBvcHRpb25zLndpdGhQaGFudG9tKCkpXSk7XG4gICAgdmFyIGZpeCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImZpeFwiXSwgW10pO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwicmxhcFwiXSwgW2lubmVyLCBmaXhdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKG9yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJyYWlzZWJveFwiLFxuICBuYW1lczogW1wiXFxcXHJhaXNlYm94XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYXJnVHlwZXM6IFtcInNpemVcIiwgXCJoYm94XCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGFtb3VudCA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwic2l6ZVwiKS52YWx1ZTtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicmFpc2Vib3hcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgZHk6IGFtb3VudCxcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGJvZHkgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG4gICAgdmFyIGR5ID0gY2FsY3VsYXRlU2l6ZShncm91cC5keSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogLWR5LFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuICAgIHZhciBkeSA9IGdyb3VwLmR5Lm51bWJlciArIGdyb3VwLmR5LnVuaXQ7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIGR5KTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImludGVybmFsXCIsXG4gIG5hbWVzOiBbXCJcXFxccmVsYXhcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImludGVybmFsXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZVxuICAgIH07XG4gIH1cblxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJydWxlXCIsXG4gIG5hbWVzOiBbXCJcXFxccnVsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIG51bU9wdGlvbmFsQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wic2l6ZVwiLCBcInNpemVcIiwgXCJzaXplXCJdXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBzaGlmdCA9IG9wdEFyZ3NbMF07XG4gICAgdmFyIHdpZHRoID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJzaXplXCIpO1xuICAgIHZhciBoZWlnaHQgPSBhc3NlcnROb2RlVHlwZShhcmdzWzFdLCBcInNpemVcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicnVsZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBzaGlmdDogc2hpZnQgJiYgYXNzZXJ0Tm9kZVR5cGUoc2hpZnQsIFwic2l6ZVwiKS52YWx1ZSxcbiAgICAgIHdpZHRoOiB3aWR0aC52YWx1ZSxcbiAgICAgIGhlaWdodDogaGVpZ2h0LnZhbHVlXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIE1ha2UgYW4gZW1wdHkgc3BhbiBmb3IgdGhlIHJ1bGVcbiAgICB2YXIgcnVsZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJydWxlXCJdLCBbXSwgb3B0aW9ucyk7IC8vIENhbGN1bGF0ZSB0aGUgc2hpZnQsIHdpZHRoLCBhbmQgaGVpZ2h0IG9mIHRoZSBydWxlLCBhbmQgYWNjb3VudCBmb3IgdW5pdHNcblxuICAgIHZhciB3aWR0aCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIHZhciBoZWlnaHQgPSBjYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIHNoaWZ0ID0gZ3JvdXAuc2hpZnQgPyBjYWxjdWxhdGVTaXplKGdyb3VwLnNoaWZ0LCBvcHRpb25zKSA6IDA7IC8vIFN0eWxlIHRoZSBydWxlIHRvIHRoZSByaWdodCBzaXplXG5cbiAgICBydWxlLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBtYWtlRW0od2lkdGgpO1xuICAgIHJ1bGUuc3R5bGUuYm9yZGVyVG9wV2lkdGggPSBtYWtlRW0oaGVpZ2h0KTtcbiAgICBydWxlLnN0eWxlLmJvdHRvbSA9IG1ha2VFbShzaGlmdCk7IC8vIFJlY29yZCB0aGUgaGVpZ2h0IGFuZCB3aWR0aFxuXG4gICAgcnVsZS53aWR0aCA9IHdpZHRoO1xuICAgIHJ1bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgc2hpZnQ7XG4gICAgcnVsZS5kZXB0aCA9IC1zaGlmdDsgLy8gRm9udCBzaXplIGlzIHRoZSBudW1iZXIgbGFyZ2UgZW5vdWdoIHRoYXQgdGhlIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlc2VydmUgYXQgbGVhc3QgYGFic0hlaWdodGAgc3BhY2UgYWJvdmUgdGhlIGJhc2VsaW5lLlxuICAgIC8vIFRoZSAxLjEyNSBmYWN0b3Igd2FzIGVtcGlyaWNhbGx5IGRldGVybWluZWRcblxuICAgIHJ1bGUubWF4Rm9udFNpemUgPSBoZWlnaHQgKiAxLjEyNSAqIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciB3aWR0aCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIHZhciBoZWlnaHQgPSBjYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIHNoaWZ0ID0gZ3JvdXAuc2hpZnQgPyBjYWxjdWxhdGVTaXplKGdyb3VwLnNoaWZ0LCBvcHRpb25zKSA6IDA7XG4gICAgdmFyIGNvbG9yID0gb3B0aW9ucy5jb2xvciAmJiBvcHRpb25zLmdldENvbG9yKCkgfHwgXCJibGFja1wiO1xuICAgIHZhciBydWxlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3BhY2VcIik7XG4gICAgcnVsZS5zZXRBdHRyaWJ1dGUoXCJtYXRoYmFja2dyb3VuZFwiLCBjb2xvcik7XG4gICAgcnVsZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBtYWtlRW0od2lkdGgpKTtcbiAgICBydWxlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBtYWtlRW0oaGVpZ2h0KSk7XG4gICAgdmFyIHdyYXBwZXIgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgW3J1bGVdKTtcblxuICAgIGlmIChzaGlmdCA+PSAwKSB7XG4gICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBtYWtlRW0oc2hpZnQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgbWFrZUVtKHNoaWZ0KSk7XG4gICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcImRlcHRoXCIsIG1ha2VFbSgtc2hpZnQpKTtcbiAgICB9XG5cbiAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcInZvZmZzZXRcIiwgbWFrZUVtKHNoaWZ0KSk7XG4gICAgcmV0dXJuIHdyYXBwZXI7XG4gIH1cblxufSk7XG5cbmZ1bmN0aW9uIHNpemluZ0dyb3VwKHZhbHVlLCBvcHRpb25zLCBiYXNlT3B0aW9ucykge1xuICB2YXIgaW5uZXIgPSBidWlsZEV4cHJlc3Npb24kMSh2YWx1ZSwgb3B0aW9ucywgZmFsc2UpO1xuICB2YXIgbXVsdGlwbGllciA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBiYXNlT3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gQWRkIHNpemUtcmVzZXR0aW5nIGNsYXNzZXMgdG8gdGhlIGlubmVyIGxpc3QgYW5kIHNldCBtYXhGb250U2l6ZVxuICAvLyBtYW51YWxseS4gSGFuZGxlIG5lc3RlZCBzaXplIGNoYW5nZXMuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbm5lci5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwb3MgPSBpbm5lcltpXS5jbGFzc2VzLmluZGV4T2YoXCJzaXppbmdcIik7XG5cbiAgICBpZiAocG9zIDwgMCkge1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaW5uZXJbaV0uY2xhc3Nlcywgb3B0aW9ucy5zaXppbmdDbGFzc2VzKGJhc2VPcHRpb25zKSk7XG4gICAgfSBlbHNlIGlmIChpbm5lcltpXS5jbGFzc2VzW3BvcyArIDFdID09PSBcInJlc2V0LXNpemVcIiArIG9wdGlvbnMuc2l6ZSkge1xuICAgICAgLy8gVGhpcyBpcyBhIG5lc3RlZCBzaXplIGNoYW5nZTogZS5nLiwgaW5uZXJbaV0gaXMgdGhlIFwiYlwiIGluXG4gICAgICAvLyBgXFxIdWdlIGEgXFxzbWFsbCBiYC4gT3ZlcnJpZGUgdGhlIG9sZCBzaXplICh0aGUgYHJlc2V0LWAgY2xhc3MpXG4gICAgICAvLyBidXQgbm90IHRoZSBuZXcgc2l6ZS5cbiAgICAgIGlubmVyW2ldLmNsYXNzZXNbcG9zICsgMV0gPSBcInJlc2V0LXNpemVcIiArIGJhc2VPcHRpb25zLnNpemU7XG4gICAgfVxuXG4gICAgaW5uZXJbaV0uaGVpZ2h0ICo9IG11bHRpcGxpZXI7XG4gICAgaW5uZXJbaV0uZGVwdGggKj0gbXVsdGlwbGllcjtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoaW5uZXIpO1xufVxudmFyIHNpemVGdW5jcyA9IFtcIlxcXFx0aW55XCIsIFwiXFxcXHNpeHB0c2l6ZVwiLCBcIlxcXFxzY3JpcHRzaXplXCIsIFwiXFxcXGZvb3Rub3Rlc2l6ZVwiLCBcIlxcXFxzbWFsbFwiLCBcIlxcXFxub3JtYWxzaXplXCIsIFwiXFxcXGxhcmdlXCIsIFwiXFxcXExhcmdlXCIsIFwiXFxcXExBUkdFXCIsIFwiXFxcXGh1Z2VcIiwgXCJcXFxcSHVnZVwiXTtcbnZhciBodG1sQnVpbGRlciA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAvLyBIYW5kbGUgc2l6aW5nIG9wZXJhdG9ycyBsaWtlIFxcSHVnZS4gUmVhbCBUZVggZG9lc24ndCBhY3R1YWxseSBhbGxvd1xuICAvLyB0aGVzZSBmdW5jdGlvbnMgaW5zaWRlIG9mIG1hdGggZXhwcmVzc2lvbnMsIHNvIHdlIGRvIHNvbWUgc3BlY2lhbFxuICAvLyBoYW5kbGluZy5cbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1NpemUoZ3JvdXAuc2l6ZSk7XG4gIHJldHVybiBzaXppbmdHcm91cChncm91cC5ib2R5LCBuZXdPcHRpb25zLCBvcHRpb25zKTtcbn07XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic2l6aW5nXCIsXG4gIG5hbWVzOiBzaXplRnVuY3MsXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIGJyZWFrT25Ub2tlblRleHQsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgYnJlYWtPblRva2VuVGV4dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic2l6aW5nXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBzaXplIHRvIHVzZSBiYXNlZCBvbiB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgYWJvdmVcbiAgICAgIHNpemU6IHNpemVGdW5jcy5pbmRleE9mKGZ1bmNOYW1lKSArIDEsXG4gICAgICBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTaXplKGdyb3VwLnNpemUpO1xuICAgIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBuZXdPcHRpb25zKTtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIGlubmVyKTsgLy8gVE9ETyhlbWlseSk6IFRoaXMgZG9lc24ndCBwcm9kdWNlIHRoZSBjb3JyZWN0IHNpemUgZm9yIG5lc3RlZCBzaXplXG4gICAgLy8gY2hhbmdlcywgYmVjYXVzZSB3ZSBkb24ndCBrZWVwIHN0YXRlIG9mIHdoYXQgc3R5bGUgd2UncmUgY3VycmVudGx5XG4gICAgLy8gaW4sIHNvIHdlIGNhbid0IHJlc2V0IHRoZSBzaXplIHRvIG5vcm1hbCBiZWZvcmUgY2hhbmdpbmcgaXQuICBOb3dcbiAgICAvLyB0aGF0IHdlJ3JlIHBhc3NpbmcgYW4gb3B0aW9ucyBwYXJhbWV0ZXIgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZml4XG4gICAgLy8gdGhpcy5cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHNpemVcIiwgbWFrZUVtKG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIpKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbi8vIHNtYXNoLCB3aXRoIG9wdGlvbmFsIFt0Yl0sIGFzIGluIEFNU1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInNtYXNoXCIsXG4gIG5hbWVzOiBbXCJcXFxcc21hc2hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncywgb3B0QXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgc21hc2hIZWlnaHQgPSBmYWxzZTtcbiAgICB2YXIgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgIHZhciB0YkFyZyA9IG9wdEFyZ3NbMF0gJiYgYXNzZXJ0Tm9kZVR5cGUob3B0QXJnc1swXSwgXCJvcmRncm91cFwiKTtcblxuICAgIGlmICh0YkFyZykge1xuICAgICAgLy8gT3B0aW9uYWwgW3RiXSBhcmd1bWVudCBpcyBlbmdhZ2VkLlxuICAgICAgLy8gcmVmOiBhbXNtYXRoOiBcXHJlbmV3Y29tbWFuZHtcXHNtYXNofVsxXVt0Yl17JVxuICAgICAgLy8gICAgICAgICAgICAgICBkZWZcXG1iQHR7XFxodH1cXGRlZlxcbWJAYntcXGRwfVxcZGVmXFxtYkB0YntcXGh0XFx6QFxcekBcXGRwfSVcbiAgICAgIHZhciBsZXR0ZXIgPSBcIlwiO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRiQXJnLmJvZHkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0YkFyZy5ib2R5W2ldOyAvLyAkRmxvd0ZpeE1lOiBOb3QgZXZlcnkgbm9kZSB0eXBlIGhhcyBhIGB0ZXh0YCBwcm9wZXJ0eS5cblxuICAgICAgICBsZXR0ZXIgPSBub2RlLnRleHQ7XG5cbiAgICAgICAgaWYgKGxldHRlciA9PT0gXCJ0XCIpIHtcbiAgICAgICAgICBzbWFzaEhlaWdodCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobGV0dGVyID09PSBcImJcIikge1xuICAgICAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNtYXNoSGVpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNtYXNoSGVpZ2h0ID0gdHJ1ZTtcbiAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzbWFzaFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5LFxuICAgICAgc21hc2hIZWlnaHQsXG4gICAgICBzbWFzaERlcHRoXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyldKTtcblxuICAgIGlmICghZ3JvdXAuc21hc2hIZWlnaHQgJiYgIWdyb3VwLnNtYXNoRGVwdGgpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGlmIChncm91cC5zbWFzaEhlaWdodCkge1xuICAgICAgbm9kZS5oZWlnaHQgPSAwOyAvLyBJbiBvcmRlciB0byBpbmZsdWVuY2UgbWFrZVZMaXN0LCB3ZSBoYXZlIHRvIHJlc2V0IHRoZSBjaGlsZHJlbi5cblxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbm9kZS5jaGlsZHJlbltpXS5oZWlnaHQgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnNtYXNoRGVwdGgpIHtcbiAgICAgIG5vZGUuZGVwdGggPSAwO1xuXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuW19pXS5kZXB0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEF0IHRoaXMgcG9pbnQsIHdlJ3ZlIHJlc2V0IHRoZSBUZVgtbGlrZSBoZWlnaHQgYW5kIGRlcHRoIHZhbHVlcy5cbiAgICAvLyBCdXQgdGhlIHNwYW4gc3RpbGwgaGFzIGFuIEhUTUwgbGluZSBoZWlnaHQuXG4gICAgLy8gbWFrZVZMaXN0IGFwcGxpZXMgXCJkaXNwbGF5OiB0YWJsZS1jZWxsXCIsIHdoaWNoIHByZXZlbnRzIHRoZSBicm93c2VyXG4gICAgLy8gZnJvbSBhY3Rpbmcgb24gdGhhdCBsaW5lIGhlaWdodC4gU28gd2UnbGwgY2FsbCBtYWtlVkxpc3Qgbm93LlxuXG5cbiAgICB2YXIgc21hc2hlZE5vZGUgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbm9kZVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gRm9yIHNwYWNpbmcsIFRlWCB0cmVhdHMgXFxocGhhbnRvbSBhcyBhIG1hdGggZ3JvdXAgKHNhbWUgc3BhY2luZyBhcyBvcmQpLlxuXG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0sIFtzbWFzaGVkTm9kZV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKGdyb3VwLnNtYXNoSGVpZ2h0KSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJzcXJ0XCIsXG4gIG5hbWVzOiBbXCJcXFxcc3FydFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIG51bU9wdGlvbmFsQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgaW5kZXggPSBvcHRBcmdzWzBdO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzcXJ0XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHksXG4gICAgICBpbmRleFxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBTcXVhcmUgcm9vdHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcuIDQ0MywgUnVsZSAxMS5cbiAgICAvLyBGaXJzdCwgd2UgZG8gdGhlIHNhbWUgc3RlcHMgYXMgaW4gb3ZlcmxpbmUgdG8gYnVpbGQgdGhlIGlubmVyIGdyb3VwXG4gICAgLy8gYW5kIGxpbmVcbiAgICB2YXIgaW5uZXIgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7XG5cbiAgICBpZiAoaW5uZXIuaGVpZ2h0ID09PSAwKSB7XG4gICAgICAvLyBSZW5kZXIgYSBzbWFsbCBzdXJkLlxuICAgICAgaW5uZXIuaGVpZ2h0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAgIC8vIHRoZW0gaW4gYSBzcGFuLlxuXG5cbiAgICBpbm5lciA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChpbm5lciwgb3B0aW9ucyk7IC8vIENhbGN1bGF0ZSB0aGUgbWluaW11bSBzaXplIGZvciB0aGUgXFxzdXJkIGRlbGltaXRlclxuXG4gICAgdmFyIG1ldHJpY3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCk7XG4gICAgdmFyIHRoZXRhID0gbWV0cmljcy5kZWZhdWx0UnVsZVRoaWNrbmVzcztcbiAgICB2YXIgcGhpID0gdGhldGE7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pZCA8IFN0eWxlJDEuVEVYVC5pZCkge1xuICAgICAgcGhpID0gb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSAvLyBDYWxjdWxhdGUgdGhlIGNsZWFyYW5jZSBiZXR3ZWVuIHRoZSBib2R5IGFuZCBsaW5lXG5cblxuICAgIHZhciBsaW5lQ2xlYXJhbmNlID0gdGhldGEgKyBwaGkgLyA0O1xuICAgIHZhciBtaW5EZWxpbWl0ZXJIZWlnaHQgPSBpbm5lci5oZWlnaHQgKyBpbm5lci5kZXB0aCArIGxpbmVDbGVhcmFuY2UgKyB0aGV0YTsgLy8gQ3JlYXRlIGEgc3FydCBTVkcgb2YgdGhlIHJlcXVpcmVkIG1pbmltdW0gc2l6ZVxuXG4gICAgdmFyIHtcbiAgICAgIHNwYW46IGltZyxcbiAgICAgIHJ1bGVXaWR0aCxcbiAgICAgIGFkdmFuY2VXaWR0aFxuICAgIH0gPSBkZWxpbWl0ZXIuc3FydEltYWdlKG1pbkRlbGltaXRlckhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIGRlbGltRGVwdGggPSBpbWcuaGVpZ2h0IC0gcnVsZVdpZHRoOyAvLyBBZGp1c3QgdGhlIGNsZWFyYW5jZSBiYXNlZCBvbiB0aGUgZGVsaW1pdGVyIHNpemVcblxuICAgIGlmIChkZWxpbURlcHRoID4gaW5uZXIuaGVpZ2h0ICsgaW5uZXIuZGVwdGggKyBsaW5lQ2xlYXJhbmNlKSB7XG4gICAgICBsaW5lQ2xlYXJhbmNlID0gKGxpbmVDbGVhcmFuY2UgKyBkZWxpbURlcHRoIC0gaW5uZXIuaGVpZ2h0IC0gaW5uZXIuZGVwdGgpIC8gMjtcbiAgICB9IC8vIFNoaWZ0IHRoZSBzcXJ0IGltYWdlXG5cblxuICAgIHZhciBpbWdTaGlmdCA9IGltZy5oZWlnaHQgLSBpbm5lci5oZWlnaHQgLSBsaW5lQ2xlYXJhbmNlIC0gcnVsZVdpZHRoO1xuICAgIGlubmVyLnN0eWxlLnBhZGRpbmdMZWZ0ID0gbWFrZUVtKGFkdmFuY2VXaWR0aCk7IC8vIE92ZXJsYXkgdGhlIGltYWdlIGFuZCB0aGUgYXJndW1lbnQuXG5cbiAgICB2YXIgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lcixcbiAgICAgICAgd3JhcHBlckNsYXNzZXM6IFtcInN2Zy1hbGlnblwiXVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogLShpbm5lci5oZWlnaHQgKyBpbWdTaGlmdClcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGltZ1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogcnVsZVdpZHRoXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFncm91cC5pbmRleCkge1xuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJzcXJ0XCJdLCBbYm9keV0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIG9wdGlvbmFsIHJvb3QgaW5kZXhcbiAgICAgIC8vIFRoZSBpbmRleCBpcyBhbHdheXMgaW4gc2NyaXB0c2NyaXB0IHN0eWxlXG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoU3R5bGUkMS5TQ1JJUFRTQ1JJUFQpO1xuICAgICAgdmFyIHJvb3RtID0gYnVpbGRHcm91cCQxKGdyb3VwLmluZGV4LCBuZXdPcHRpb25zLCBvcHRpb25zKTsgLy8gVGhlIGFtb3VudCB0aGUgaW5kZXggaXMgc2hpZnRlZCBieS4gVGhpcyBpcyB0YWtlbiBmcm9tIHRoZSBUZVhcbiAgICAgIC8vIHNvdXJjZSwgaW4gdGhlIGRlZmluaXRpb24gb2YgYFxcckBAdGAuXG5cbiAgICAgIHZhciB0b1NoaWZ0ID0gMC42ICogKGJvZHkuaGVpZ2h0IC0gYm9keS5kZXB0aCk7IC8vIEJ1aWxkIGEgVkxpc3Qgd2l0aCB0aGUgc3VwZXJzY3JpcHQgc2hpZnRlZCB1cCBjb3JyZWN0bHlcblxuICAgICAgdmFyIHJvb3RWTGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IC10b1NoaWZ0LFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiByb290bVxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7IC8vIEFkZCBhIGNsYXNzIHN1cnJvdW5kaW5nIGl0IHNvIHdlIGNhbiBhZGQgb24gdGhlIGFwcHJvcHJpYXRlXG4gICAgICAvLyBrZXJuaW5nXG5cbiAgICAgIHZhciByb290Vkxpc3RXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wicm9vdFwiXSwgW3Jvb3RWTGlzdF0pO1xuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJzcXJ0XCJdLCBbcm9vdFZMaXN0V3JhcCwgYm9keV0sIG9wdGlvbnMpO1xuICAgIH1cbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHtcbiAgICAgIGJvZHksXG4gICAgICBpbmRleFxuICAgIH0gPSBncm91cDtcbiAgICByZXR1cm4gaW5kZXggPyBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb290XCIsIFtidWlsZEdyb3VwKGJvZHksIG9wdGlvbnMpLCBidWlsZEdyb3VwKGluZGV4LCBvcHRpb25zKV0pIDogbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3FydFwiLCBbYnVpbGRHcm91cChib2R5LCBvcHRpb25zKV0pO1xuICB9XG5cbn0pO1xuXG52YXIgc3R5bGVNYXAgPSB7XG4gIFwiZGlzcGxheVwiOiBTdHlsZSQxLkRJU1BMQVksXG4gIFwidGV4dFwiOiBTdHlsZSQxLlRFWFQsXG4gIFwic2NyaXB0XCI6IFN0eWxlJDEuU0NSSVBULFxuICBcInNjcmlwdHNjcmlwdFwiOiBTdHlsZSQxLlNDUklQVFNDUklQVFxufTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJzdHlsaW5nXCIsXG4gIG5hbWVzOiBbXCJcXFxcZGlzcGxheXN0eWxlXCIsIFwiXFxcXHRleHRzdHlsZVwiLCBcIlxcXFxzY3JpcHRzdHlsZVwiLCBcIlxcXFxzY3JpcHRzY3JpcHRzdHlsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIGJyZWFrT25Ub2tlblRleHQsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIC8vIHBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keVxuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbih0cnVlLCBicmVha09uVG9rZW5UZXh0KTsgLy8gVE9ETzogUmVmYWN0b3IgdG8gYXZvaWQgZHVwbGljYXRpbmcgc3R5bGVNYXAgaW4gbXVsdGlwbGUgcGxhY2VzIChlLmcuXG4gICAgLy8gaGVyZSBhbmQgaW4gYnVpbGRIVE1MIGFuZCBkZS1kdXBlIHRoZSBlbnVtZXJhdGlvbiBvZiBhbGwgdGhlIHN0eWxlcykuXG4gICAgLy8gJEZsb3dGaXhNZTogVGhlIG5hbWVzIGFib3ZlIGV4YWN0bHkgbWF0Y2ggdGhlIHN0eWxlcy5cblxuICAgIHZhciBzdHlsZSA9IGZ1bmNOYW1lLnNsaWNlKDEsIGZ1bmNOYW1lLmxlbmd0aCAtIDUpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgLy8gRmlndXJlIG91dCB3aGF0IHN0eWxlIHRvIHVzZSBieSBwdWxsaW5nIG91dCB0aGUgc3R5bGUgZnJvbVxuICAgICAgLy8gdGhlIGZ1bmN0aW9uIG5hbWVcbiAgICAgIHN0eWxlLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBTdHlsZSBjaGFuZ2VzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIG9uIHBnLiA0NDIsIFJ1bGUgMy5cbiAgICB2YXIgbmV3U3R5bGUgPSBzdHlsZU1hcFtncm91cC5zdHlsZV07XG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKG5ld1N0eWxlKS53aXRoRm9udCgnJyk7XG4gICAgcmV0dXJuIHNpemluZ0dyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBGaWd1cmUgb3V0IHdoYXQgc3R5bGUgd2UncmUgY2hhbmdpbmcgdG8uXG4gICAgdmFyIG5ld1N0eWxlID0gc3R5bGVNYXBbZ3JvdXAuc3R5bGVdO1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuZXdTdHlsZSk7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpO1xuICAgIHZhciBzdHlsZUF0dHJpYnV0ZXMgPSB7XG4gICAgICBcImRpc3BsYXlcIjogW1wiMFwiLCBcInRydWVcIl0sXG4gICAgICBcInRleHRcIjogW1wiMFwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRcIjogW1wiMVwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRzY3JpcHRcIjogW1wiMlwiLCBcImZhbHNlXCJdXG4gICAgfTtcbiAgICB2YXIgYXR0ciA9IHN0eWxlQXR0cmlidXRlc1tncm91cC5zdHlsZV07XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBhdHRyWzBdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImRpc3BsYXlzdHlsZVwiLCBhdHRyWzFdKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcblxuLyoqXG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBzdWJzY3JpcHRzIGF0dGFjaGVkIHRvIHRoZW0uIFRoaXMgZnVuY3Rpb24gbGV0cyB0aGUgYHN1cHN1YmAgZ3JvdXAga25vdyB0aGF0XG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBpdHMgaW5uZXIgZWxlbWVudCBzaG91bGQgaGFuZGxlIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMgaW5zdGVhZCBvZlxuICogaGFuZGxpbmcgdGhlbSBpdHNlbGYuXG4gKi9cbnZhciBodG1sQnVpbGRlckRlbGVnYXRlID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXJEZWxlZ2F0ZShncm91cCwgb3B0aW9ucykge1xuICB2YXIgYmFzZSA9IGdyb3VwLmJhc2U7XG5cbiAgaWYgKCFiYXNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoYmFzZS50eXBlID09PSBcIm9wXCIpIHtcbiAgICAvLyBPcGVyYXRvcnMgaGFuZGxlIHN1cHN1YnMgZGlmZmVyZW50bHkgd2hlbiB0aGV5IGhhdmUgbGltaXRzXG4gICAgLy8gKGUuZy4gYFxcZGlzcGxheXN0eWxlXFxzdW1fMl4zYClcbiAgICB2YXIgZGVsZWdhdGUgPSBiYXNlLmxpbWl0cyAmJiAob3B0aW9ucy5zdHlsZS5zaXplID09PSBTdHlsZSQxLkRJU1BMQVkuc2l6ZSB8fCBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1Yik7XG4gICAgcmV0dXJuIGRlbGVnYXRlID8gaHRtbEJ1aWxkZXIkMiA6IG51bGw7XG4gIH0gZWxzZSBpZiAoYmFzZS50eXBlID09PSBcIm9wZXJhdG9ybmFtZVwiKSB7XG4gICAgdmFyIF9kZWxlZ2F0ZSA9IGJhc2UuYWx3YXlzSGFuZGxlU3VwU3ViICYmIChvcHRpb25zLnN0eWxlLnNpemUgPT09IFN0eWxlJDEuRElTUExBWS5zaXplIHx8IGJhc2UubGltaXRzKTtcblxuICAgIHJldHVybiBfZGVsZWdhdGUgPyBodG1sQnVpbGRlciQxIDogbnVsbDtcbiAgfSBlbHNlIGlmIChiYXNlLnR5cGUgPT09IFwiYWNjZW50XCIpIHtcbiAgICByZXR1cm4gdXRpbHMuaXNDaGFyYWN0ZXJCb3goYmFzZS5iYXNlKSA/IGh0bWxCdWlsZGVyJGEgOiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJob3JpekJyYWNlXCIpIHtcbiAgICB2YXIgaXNTdXAgPSAhZ3JvdXAuc3ViO1xuICAgIHJldHVybiBpc1N1cCA9PT0gYmFzZS5pc092ZXIgPyBodG1sQnVpbGRlciQzIDogbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTsgLy8gU3VwZXIgc2NyaXB0cyBhbmQgc3Vic2NyaXB0cywgd2hvc2UgcHJlY2lzZSBwbGFjZW1lbnQgY2FuIGRlcGVuZCBvbiBvdGhlclxuLy8gZnVuY3Rpb25zIHRoYXQgcHJlY2VkZSB0aGVtLlxuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInN1cHN1YlwiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gU3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgb24gcGFnZVxuICAgIC8vIDQ0NS00NDYsIHJ1bGVzIDE4KGEtZikuXG4gICAgLy8gSGVyZSBpcyB3aGVyZSB3ZSBkZWZlciB0byB0aGUgaW5uZXIgZ3JvdXAgaWYgaXQgc2hvdWxkIGhhbmRsZVxuICAgIC8vIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyBpdHNlbGYuXG4gICAgdmFyIGJ1aWxkZXJEZWxlZ2F0ZSA9IGh0bWxCdWlsZGVyRGVsZWdhdGUoZ3JvdXAsIG9wdGlvbnMpO1xuXG4gICAgaWYgKGJ1aWxkZXJEZWxlZ2F0ZSkge1xuICAgICAgcmV0dXJuIGJ1aWxkZXJEZWxlZ2F0ZShncm91cCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgdmFyIHtcbiAgICAgIGJhc2U6IHZhbHVlQmFzZSxcbiAgICAgIHN1cDogdmFsdWVTdXAsXG4gICAgICBzdWI6IHZhbHVlU3ViXG4gICAgfSA9IGdyb3VwO1xuICAgIHZhciBiYXNlID0gYnVpbGRHcm91cCQxKHZhbHVlQmFzZSwgb3B0aW9ucyk7XG4gICAgdmFyIHN1cG07XG4gICAgdmFyIHN1Ym07XG4gICAgdmFyIG1ldHJpY3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCk7IC8vIFJ1bGUgMThhXG5cbiAgICB2YXIgc3VwU2hpZnQgPSAwO1xuICAgIHZhciBzdWJTaGlmdCA9IDA7XG4gICAgdmFyIGlzQ2hhcmFjdGVyQm94ID0gdmFsdWVCYXNlICYmIHV0aWxzLmlzQ2hhcmFjdGVyQm94KHZhbHVlQmFzZSk7XG5cbiAgICBpZiAodmFsdWVTdXApIHtcbiAgICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnN1cCgpKTtcbiAgICAgIHN1cG0gPSBidWlsZEdyb3VwJDEodmFsdWVTdXAsIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIWlzQ2hhcmFjdGVyQm94KSB7XG4gICAgICAgIHN1cFNoaWZ0ID0gYmFzZS5oZWlnaHQgLSBuZXdPcHRpb25zLmZvbnRNZXRyaWNzKCkuc3VwRHJvcCAqIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZVN1Yikge1xuICAgICAgdmFyIF9uZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnN1YigpKTtcblxuICAgICAgc3VibSA9IGJ1aWxkR3JvdXAkMSh2YWx1ZVN1YiwgX25ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIWlzQ2hhcmFjdGVyQm94KSB7XG4gICAgICAgIHN1YlNoaWZ0ID0gYmFzZS5kZXB0aCArIF9uZXdPcHRpb25zLmZvbnRNZXRyaWNzKCkuc3ViRHJvcCAqIF9uZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICAgIH1cbiAgICB9IC8vIFJ1bGUgMThjXG5cblxuICAgIHZhciBtaW5TdXBTaGlmdDtcblxuICAgIGlmIChvcHRpb25zLnN0eWxlID09PSBTdHlsZSQxLkRJU1BMQVkpIHtcbiAgICAgIG1pblN1cFNoaWZ0ID0gbWV0cmljcy5zdXAxO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zdHlsZS5jcmFtcGVkKSB7XG4gICAgICBtaW5TdXBTaGlmdCA9IG1ldHJpY3Muc3VwMztcbiAgICB9IGVsc2Uge1xuICAgICAgbWluU3VwU2hpZnQgPSBtZXRyaWNzLnN1cDI7XG4gICAgfSAvLyBzY3JpcHRzcGFjZSBpcyBhIGZvbnQtc2l6ZS1pbmRlcGVuZGVudCBzaXplLCBzbyBzY2FsZSBpdFxuICAgIC8vIGFwcHJvcHJpYXRlbHkgZm9yIHVzZSBhcyB0aGUgbWFyZ2luUmlnaHQuXG5cblxuICAgIHZhciBtdWx0aXBsaWVyID0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB2YXIgbWFyZ2luUmlnaHQgPSBtYWtlRW0oMC41IC8gbWV0cmljcy5wdFBlckVtIC8gbXVsdGlwbGllcik7XG4gICAgdmFyIG1hcmdpbkxlZnQgPSBudWxsO1xuXG4gICAgaWYgKHN1Ym0pIHtcbiAgICAgIC8vIFN1YnNjcmlwdHMgc2hvdWxkbid0IGJlIHNoaWZ0ZWQgYnkgdGhlIGJhc2UncyBpdGFsaWMgY29ycmVjdGlvbi5cbiAgICAgIC8vIEFjY291bnQgZm9yIHRoYXQgYnkgc2hpZnRpbmcgdGhlIHN1YnNjcmlwdCBiYWNrIHRoZSBhcHByb3ByaWF0ZVxuICAgICAgLy8gYW1vdW50LiBOb3RlIHdlIG9ubHkgZG8gdGhpcyB3aGVuIHRoZSBiYXNlIGlzIGEgc2luZ2xlIHN5bWJvbC5cbiAgICAgIHZhciBpc09paW50ID0gZ3JvdXAuYmFzZSAmJiBncm91cC5iYXNlLnR5cGUgPT09IFwib3BcIiAmJiBncm91cC5iYXNlLm5hbWUgJiYgKGdyb3VwLmJhc2UubmFtZSA9PT0gXCJcXFxcb2lpbnRcIiB8fCBncm91cC5iYXNlLm5hbWUgPT09IFwiXFxcXG9paWludFwiKTtcblxuICAgICAgaWYgKGJhc2UgaW5zdGFuY2VvZiBTeW1ib2xOb2RlIHx8IGlzT2lpbnQpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBtYXJnaW5MZWZ0ID0gbWFrZUVtKC1iYXNlLml0YWxpYyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN1cHN1YjtcblxuICAgIGlmIChzdXBtICYmIHN1Ym0pIHtcbiAgICAgIHN1cFNoaWZ0ID0gTWF0aC5tYXgoc3VwU2hpZnQsIG1pblN1cFNoaWZ0LCBzdXBtLmRlcHRoICsgMC4yNSAqIG1ldHJpY3MueEhlaWdodCk7XG4gICAgICBzdWJTaGlmdCA9IE1hdGgubWF4KHN1YlNoaWZ0LCBtZXRyaWNzLnN1YjIpO1xuICAgICAgdmFyIHJ1bGVXaWR0aCA9IG1ldHJpY3MuZGVmYXVsdFJ1bGVUaGlja25lc3M7IC8vIFJ1bGUgMThlXG5cbiAgICAgIHZhciBtYXhXaWR0aCA9IDQgKiBydWxlV2lkdGg7XG5cbiAgICAgIGlmIChzdXBTaGlmdCAtIHN1cG0uZGVwdGggLSAoc3VibS5oZWlnaHQgLSBzdWJTaGlmdCkgPCBtYXhXaWR0aCkge1xuICAgICAgICBzdWJTaGlmdCA9IG1heFdpZHRoIC0gKHN1cFNoaWZ0IC0gc3VwbS5kZXB0aCkgKyBzdWJtLmhlaWdodDtcbiAgICAgICAgdmFyIHBzaSA9IDAuOCAqIG1ldHJpY3MueEhlaWdodCAtIChzdXBTaGlmdCAtIHN1cG0uZGVwdGgpO1xuXG4gICAgICAgIGlmIChwc2kgPiAwKSB7XG4gICAgICAgICAgc3VwU2hpZnQgKz0gcHNpO1xuICAgICAgICAgIHN1YlNoaWZ0IC09IHBzaTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmxpc3RFbGVtID0gW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Ym0sXG4gICAgICAgIHNoaWZ0OiBzdWJTaGlmdCxcbiAgICAgICAgbWFyZ2luUmlnaHQsXG4gICAgICAgIG1hcmdpbkxlZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1cG0sXG4gICAgICAgIHNoaWZ0OiAtc3VwU2hpZnQsXG4gICAgICAgIG1hcmdpblJpZ2h0XG4gICAgICB9XTtcbiAgICAgIHN1cHN1YiA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgICAgY2hpbGRyZW46IHZsaXN0RWxlbVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChzdWJtKSB7XG4gICAgICAvLyBSdWxlIDE4YlxuICAgICAgc3ViU2hpZnQgPSBNYXRoLm1heChzdWJTaGlmdCwgbWV0cmljcy5zdWIxLCBzdWJtLmhlaWdodCAtIDAuOCAqIG1ldHJpY3MueEhlaWdodCk7XG4gICAgICB2YXIgX3ZsaXN0RWxlbSA9IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdWJtLFxuICAgICAgICBtYXJnaW5MZWZ0LFxuICAgICAgICBtYXJnaW5SaWdodFxuICAgICAgfV07XG4gICAgICBzdXBzdWIgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgICAgcG9zaXRpb25EYXRhOiBzdWJTaGlmdCxcbiAgICAgICAgY2hpbGRyZW46IF92bGlzdEVsZW1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoc3VwbSkge1xuICAgICAgLy8gUnVsZSAxOGMsIGRcbiAgICAgIHN1cFNoaWZ0ID0gTWF0aC5tYXgoc3VwU2hpZnQsIG1pblN1cFNoaWZ0LCBzdXBtLmRlcHRoICsgMC4yNSAqIG1ldHJpY3MueEhlaWdodCk7XG4gICAgICBzdXBzdWIgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgICAgcG9zaXRpb25EYXRhOiAtc3VwU2hpZnQsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHN1cG0sXG4gICAgICAgICAgbWFyZ2luUmlnaHRcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdXBzdWIgbXVzdCBoYXZlIGVpdGhlciBzdXAgb3Igc3ViLlwiKTtcbiAgICB9IC8vIFdyYXAgdGhlIHN1cHN1YiB2bGlzdCBpbiBhIHNwYW4ubXN1cHN1YiB0byByZXNldCB0ZXh0LWFsaWduLlxuXG5cbiAgICB2YXIgbWNsYXNzID0gZ2V0VHlwZU9mRG9tVHJlZShiYXNlLCBcInJpZ2h0XCIpIHx8IFwibW9yZFwiO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbbWNsYXNzXSwgW2Jhc2UsIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1zdXBzdWJcIl0sIFtzdXBzdWJdKV0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBJcyB0aGUgaW5uZXIgZ3JvdXAgYSByZWxldmFudCBob3Jpem9uYWwgYnJhY2U/XG4gICAgdmFyIGlzQnJhY2UgPSBmYWxzZTtcbiAgICB2YXIgaXNPdmVyO1xuICAgIHZhciBpc1N1cDtcblxuICAgIGlmIChncm91cC5iYXNlICYmIGdyb3VwLmJhc2UudHlwZSA9PT0gXCJob3JpekJyYWNlXCIpIHtcbiAgICAgIGlzU3VwID0gISFncm91cC5zdXA7XG5cbiAgICAgIGlmIChpc1N1cCA9PT0gZ3JvdXAuYmFzZS5pc092ZXIpIHtcbiAgICAgICAgaXNCcmFjZSA9IHRydWU7XG4gICAgICAgIGlzT3ZlciA9IGdyb3VwLmJhc2UuaXNPdmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncm91cC5iYXNlICYmIChncm91cC5iYXNlLnR5cGUgPT09IFwib3BcIiB8fCBncm91cC5iYXNlLnR5cGUgPT09IFwib3BlcmF0b3JuYW1lXCIpKSB7XG4gICAgICBncm91cC5iYXNlLnBhcmVudElzU3VwU3ViID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSBbYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKV07XG5cbiAgICBpZiAoZ3JvdXAuc3ViKSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkR3JvdXAoZ3JvdXAuc3ViLCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnN1cCkge1xuICAgICAgY2hpbGRyZW4ucHVzaChidWlsZEdyb3VwKGdyb3VwLnN1cCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHZhciBub2RlVHlwZTtcblxuICAgIGlmIChpc0JyYWNlKSB7XG4gICAgICBub2RlVHlwZSA9IGlzT3ZlciA/IFwibW92ZXJcIiA6IFwibXVuZGVyXCI7XG4gICAgfSBlbHNlIGlmICghZ3JvdXAuc3ViKSB7XG4gICAgICB2YXIgYmFzZSA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcFwiICYmIGJhc2UubGltaXRzICYmIChvcHRpb25zLnN0eWxlID09PSBTdHlsZSQxLkRJU1BMQVkgfHwgYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtb3ZlclwiO1xuICAgICAgfSBlbHNlIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAoYmFzZS5saW1pdHMgfHwgb3B0aW9ucy5zdHlsZSA9PT0gU3R5bGUkMS5ESVNQTEFZKSkge1xuICAgICAgICBub2RlVHlwZSA9IFwibW92ZXJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtc3VwXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghZ3JvdXAuc3VwKSB7XG4gICAgICB2YXIgX2Jhc2UgPSBncm91cC5iYXNlO1xuXG4gICAgICBpZiAoX2Jhc2UgJiYgX2Jhc2UudHlwZSA9PT0gXCJvcFwiICYmIF9iYXNlLmxpbWl0cyAmJiAob3B0aW9ucy5zdHlsZSA9PT0gU3R5bGUkMS5ESVNQTEFZIHx8IF9iYXNlLmFsd2F5c0hhbmRsZVN1cFN1YikpIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm11bmRlclwiO1xuICAgICAgfSBlbHNlIGlmIChfYmFzZSAmJiBfYmFzZS50eXBlID09PSBcIm9wZXJhdG9ybmFtZVwiICYmIF9iYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAoX2Jhc2UubGltaXRzIHx8IG9wdGlvbnMuc3R5bGUgPT09IFN0eWxlJDEuRElTUExBWSkpIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm11bmRlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdWJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9iYXNlMiA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChfYmFzZTIgJiYgX2Jhc2UyLnR5cGUgPT09IFwib3BcIiAmJiBfYmFzZTIubGltaXRzICYmIG9wdGlvbnMuc3R5bGUgPT09IFN0eWxlJDEuRElTUExBWSkge1xuICAgICAgICBub2RlVHlwZSA9IFwibXVuZGVyb3ZlclwiO1xuICAgICAgfSBlbHNlIGlmIChfYmFzZTIgJiYgX2Jhc2UyLnR5cGUgPT09IFwib3BlcmF0b3JuYW1lXCIgJiYgX2Jhc2UyLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAob3B0aW9ucy5zdHlsZSA9PT0gU3R5bGUkMS5ESVNQTEFZIHx8IF9iYXNlMi5saW1pdHMpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtdW5kZXJvdmVyXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlVHlwZSA9IFwibXN1YnN1cFwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShub2RlVHlwZSwgY2hpbGRyZW4pO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJhdG9tXCIsXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWF0aHN5bShncm91cC50ZXh0LCBncm91cC5tb2RlLCBvcHRpb25zLCBbXCJtXCIgKyBncm91cC5mYW1pbHldKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC50ZXh0LCBncm91cC5tb2RlKV0pO1xuXG4gICAgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJiaW5cIikge1xuICAgICAgdmFyIHZhcmlhbnQgPSBnZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKTtcblxuICAgICAgaWYgKHZhcmlhbnQgPT09IFwiYm9sZC1pdGFsaWNcIikge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIHZhcmlhbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAuZmFtaWx5ID09PSBcInB1bmN0XCIpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic2VwYXJhdG9yXCIsIFwidHJ1ZVwiKTtcbiAgICB9IGVsc2UgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJvcGVuXCIgfHwgZ3JvdXAuZmFtaWx5ID09PSBcImNsb3NlXCIpIHtcbiAgICAgIC8vIERlbGltcyBidWlsdCBoZXJlIHNob3VsZCBub3Qgc3RyZXRjaCB2ZXJ0aWNhbGx5LlxuICAgICAgLy8gU2VlIGRlbGltc2l6aW5nLmpzIGZvciBzdHJldGNoeSBkZWxpbXMuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0cmV0Y2h5XCIsIFwiZmFsc2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5cbi8vIFwibWF0aG9yZFwiIGFuZCBcInRleHRvcmRcIiBQYXJzZU5vZGVzIGNyZWF0ZWQgaW4gUGFyc2VyLmpzIGZyb20gc3ltYm9sIEdyb3VwcyBpblxuLy8gc3JjL3N5bWJvbHMuanMuXG52YXIgZGVmYXVsdFZhcmlhbnQgPSB7XG4gIFwibWlcIjogXCJpdGFsaWNcIixcbiAgXCJtblwiOiBcIm5vcm1hbFwiLFxuICBcIm10ZXh0XCI6IFwibm9ybWFsXCJcbn07XG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJtYXRob3JkXCIsXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZU9yZChncm91cCwgb3B0aW9ucywgXCJtYXRob3JkXCIpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWlcIiwgW21ha2VUZXh0KGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMpXSk7XG4gICAgdmFyIHZhcmlhbnQgPSBnZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKSB8fCBcIml0YWxpY1wiO1xuXG4gICAgaWYgKHZhcmlhbnQgIT09IGRlZmF1bHRWYXJpYW50W25vZGUudHlwZV0pIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgdmFyaWFudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJ0ZXh0b3JkXCIsXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZU9yZChncm91cCwgb3B0aW9ucywgXCJ0ZXh0b3JkXCIpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGV4dCA9IG1ha2VUZXh0KGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMpO1xuICAgIHZhciB2YXJpYW50ID0gZ2V0VmFyaWFudChncm91cCwgb3B0aW9ucykgfHwgXCJub3JtYWxcIjtcbiAgICB2YXIgbm9kZTtcblxuICAgIGlmIChncm91cC5tb2RlID09PSAndGV4dCcpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZXh0XCIsIFt0ZXh0XSk7XG4gICAgfSBlbHNlIGlmICgvWzAtOV0vLnRlc3QoZ3JvdXAudGV4dCkpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1uXCIsIFt0ZXh0XSk7XG4gICAgfSBlbHNlIGlmIChncm91cC50ZXh0ID09PSBcIlxcXFxwcmltZVwiKSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbdGV4dF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBbdGV4dF0pO1xuICAgIH1cblxuICAgIGlmICh2YXJpYW50ICE9PSBkZWZhdWx0VmFyaWFudFtub2RlLnR5cGVdKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIHZhcmlhbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuXG52YXIgY3NzU3BhY2UgPSB7XG4gIFwiXFxcXG5vYnJlYWtcIjogXCJub2JyZWFrXCIsXG4gIFwiXFxcXGFsbG93YnJlYWtcIjogXCJhbGxvd2JyZWFrXCJcbn07IC8vIEEgbG9va3VwIHRhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3BhY2luZyBmdW5jdGlvbi9zeW1ib2wgc2hvdWxkIGJlXG4vLyB0cmVhdGVkIGxpa2UgYSByZWd1bGFyIHNwYWNlIGNoYXJhY3Rlci4gIElmIGEgc3ltYm9sIG9yIGNvbW1hbmQgaXMgYSBrZXlcbi8vIGluIHRoaXMgdGFibGUsIHRoZW4gaXQgc2hvdWxkIGJlIGEgcmVndWxhciBzcGFjZSBjaGFyYWN0ZXIuICBGdXJ0aGVybW9yZSxcbi8vIHRoZSBhc3NvY2lhdGVkIHZhbHVlIG1heSBoYXZlIGEgYGNsYXNzTmFtZWAgc3BlY2lmeWluZyBhbiBleHRyYSBDU1MgY2xhc3Ncbi8vIHRvIGFkZCB0byB0aGUgY3JlYXRlZCBgc3BhbmAuXG5cbnZhciByZWd1bGFyU3BhY2UgPSB7XG4gIFwiIFwiOiB7fSxcbiAgXCJcXFxcIFwiOiB7fSxcbiAgXCJ+XCI6IHtcbiAgICBjbGFzc05hbWU6IFwibm9icmVha1wiXG4gIH0sXG4gIFwiXFxcXHNwYWNlXCI6IHt9LFxuICBcIlxcXFxub2JyZWFrc3BhY2VcIjoge1xuICAgIGNsYXNzTmFtZTogXCJub2JyZWFrXCJcbiAgfVxufTsgLy8gUGFyc2VOb2RlPFwic3BhY2luZ1wiPiBjcmVhdGVkIGluIFBhcnNlci5qcyBmcm9tIHRoZSBcInNwYWNpbmdcIiBzeW1ib2wgR3JvdXBzIGluXG4vLyBzcmMvc3ltYm9scy5qcy5cblxuZGVmaW5lRnVuY3Rpb25CdWlsZGVycyh7XG4gIHR5cGU6IFwic3BhY2luZ1wiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgaWYgKHJlZ3VsYXJTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgdmFyIGNsYXNzTmFtZSA9IHJlZ3VsYXJTcGFjZVtncm91cC50ZXh0XS5jbGFzc05hbWUgfHwgXCJcIjsgLy8gU3BhY2VzIGFyZSBnZW5lcmF0ZWQgYnkgYWRkaW5nIGFuIGFjdHVhbCBzcGFjZS4gRWFjaCBvZiB0aGVzZVxuICAgICAgLy8gdGhpbmdzIGhhcyBhbiBlbnRyeSBpbiB0aGUgc3ltYm9scyB0YWJsZSwgc28gdGhlc2Ugd2lsbCBiZSB0dXJuZWRcbiAgICAgIC8vIGludG8gYXBwcm9wcmlhdGUgb3V0cHV0cy5cblxuICAgICAgaWYgKGdyb3VwLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgIHZhciBvcmQgPSBidWlsZENvbW1vbi5tYWtlT3JkKGdyb3VwLCBvcHRpb25zLCBcInRleHRvcmRcIik7XG4gICAgICAgIG9yZC5jbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICAgICAgcmV0dXJuIG9yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY2xhc3NOYW1lXSwgW2J1aWxkQ29tbW9uLm1hdGhzeW0oZ3JvdXAudGV4dCwgZ3JvdXAubW9kZSwgb3B0aW9ucyldLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBTcGFjZXMgYmFzZWQgb24ganVzdCBhIENTUyBjbGFzcy5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY3NzU3BhY2VbZ3JvdXAudGV4dF1dLCBbXSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5rbm93biB0eXBlIG9mIHNwYWNlIFxcXCJcIiArIGdyb3VwLnRleHQgKyBcIlxcXCJcIik7XG4gICAgfVxuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZTtcblxuICAgIGlmIChyZWd1bGFyU3BhY2UuaGFzT3duUHJvcGVydHkoZ3JvdXAudGV4dCkpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZXh0XCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShcIlxcdTAwYTBcIildKTtcbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBDU1MtYmFzZWQgTWF0aE1MIHNwYWNlcyAoXFxub2JyZWFrLCBcXGFsbG93YnJlYWspIGFyZSBpZ25vcmVkXG4gICAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3BhY2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5rbm93biB0eXBlIG9mIHNwYWNlIFxcXCJcIiArIGdyb3VwLnRleHQgKyBcIlxcXCJcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5cbnZhciBwYWQgPSAoKSA9PiB7XG4gIHZhciBwYWROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGRcIiwgW10pO1xuICBwYWROb2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiNTAlXCIpO1xuICByZXR1cm4gcGFkTm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInRhZ1wiLFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10YWJsZVwiLCBbbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdHJcIiwgW3BhZCgpLCBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLmJvZHksIG9wdGlvbnMpXSksIHBhZCgpLCBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLnRhZywgb3B0aW9ucyldKV0pXSk7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHJldHVybiB0YWJsZTsgLy8gVE9ETzogTGVmdC1hbGlnbmVkIHRhZ3MuXG4gICAgLy8gQ3VycmVudGx5LCB0aGUgZ3JvdXAgYW5kIG9wdGlvbnMgcGFzc2VkIGhlcmUgZG8gbm90IGNvbnRhaW5cbiAgICAvLyBlbm91Z2ggaW5mbyB0byBzZXQgdGFnIGFsaWdubWVudC4gYGxlcW5vYCBpcyBpbiBTZXR0aW5ncyBidXQgaXQgaXNcbiAgICAvLyBub3QgcGFzc2VkIHRvIE9wdGlvbnMuIE9uIHRoZSBIVE1MIHNpZGUsIGxlcW5vIGlzXG4gICAgLy8gc2V0IGJ5IGEgQ1NTIGNsYXNzIGFwcGxpZWQgaW4gYnVpbGRUcmVlLmpzLiBUaGF0IHdvdWxkIGhhdmUgd29ya2VkXG4gICAgLy8gaW4gTWF0aE1MIGlmIGJyb3dzZXJzIHN1cHBvcnRlZCA8bWxhYmVsZWR0cj4uIFNpbmNlIHRoZXkgZG9uJ3QsIHdlXG4gICAgLy8gbmVlZCB0byByZXdyaXRlIHRoZSB3YXkgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG4gIH1cblxufSk7XG5cbnZhciB0ZXh0Rm9udEZhbWlsaWVzID0ge1xuICBcIlxcXFx0ZXh0XCI6IHVuZGVmaW5lZCxcbiAgXCJcXFxcdGV4dHJtXCI6IFwidGV4dHJtXCIsXG4gIFwiXFxcXHRleHRzZlwiOiBcInRleHRzZlwiLFxuICBcIlxcXFx0ZXh0dHRcIjogXCJ0ZXh0dHRcIixcbiAgXCJcXFxcdGV4dG5vcm1hbFwiOiBcInRleHRybVwiXG59O1xudmFyIHRleHRGb250V2VpZ2h0cyA9IHtcbiAgXCJcXFxcdGV4dGJmXCI6IFwidGV4dGJmXCIsXG4gIFwiXFxcXHRleHRtZFwiOiBcInRleHRtZFwiXG59O1xudmFyIHRleHRGb250U2hhcGVzID0ge1xuICBcIlxcXFx0ZXh0aXRcIjogXCJ0ZXh0aXRcIixcbiAgXCJcXFxcdGV4dHVwXCI6IFwidGV4dHVwXCJcbn07XG5cbnZhciBvcHRpb25zV2l0aEZvbnQgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250OyAvLyBDaGVja3MgaWYgdGhlIGFyZ3VtZW50IGlzIGEgZm9udCBmYW1pbHkgb3IgYSBmb250IHN0eWxlLlxuXG4gIGlmICghZm9udCkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9IGVsc2UgaWYgKHRleHRGb250RmFtaWxpZXNbZm9udF0pIHtcbiAgICByZXR1cm4gb3B0aW9ucy53aXRoVGV4dEZvbnRGYW1pbHkodGV4dEZvbnRGYW1pbGllc1tmb250XSk7XG4gIH0gZWxzZSBpZiAodGV4dEZvbnRXZWlnaHRzW2ZvbnRdKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2l0aFRleHRGb250V2VpZ2h0KHRleHRGb250V2VpZ2h0c1tmb250XSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2l0aFRleHRGb250U2hhcGUodGV4dEZvbnRTaGFwZXNbZm9udF0pO1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dFwiLFxuICBuYW1lczogWy8vIEZvbnQgZmFtaWxpZXNcbiAgXCJcXFxcdGV4dFwiLCBcIlxcXFx0ZXh0cm1cIiwgXCJcXFxcdGV4dHNmXCIsIFwiXFxcXHRleHR0dFwiLCBcIlxcXFx0ZXh0bm9ybWFsXCIsIC8vIEZvbnQgd2VpZ2h0c1xuICBcIlxcXFx0ZXh0YmZcIiwgXCJcXFxcdGV4dG1kXCIsIC8vIEZvbnQgU2hhcGVzXG4gIFwiXFxcXHRleHRpdFwiLCBcIlxcXFx0ZXh0dXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXSxcbiAgICBhbGxvd2VkSW5Bcmd1bWVudDogdHJ1ZSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogb3JkYXJndW1lbnQoYm9keSksXG4gICAgICBmb250OiBmdW5jTmFtZVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnNXaXRoRm9udChncm91cCwgb3B0aW9ucyk7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgbmV3T3B0aW9ucywgdHJ1ZSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJ0ZXh0XCJdLCBpbm5lciwgbmV3T3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9uc1dpdGhGb250KGdyb3VwLCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidW5kZXJsaW5lXCIsXG4gIG5hbWVzOiBbXCJcXFxcdW5kZXJsaW5lXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1bmRlcmxpbmVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogYXJnc1swXVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBVbmRlcmxpbmVzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIHBnIDQ0MywgUnVsZSAxMC5cbiAgICAvLyBCdWlsZCB0aGUgaW5uZXIgZ3JvdXAuXG4gICAgdmFyIGlubmVyR3JvdXAgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyk7IC8vIENyZWF0ZSB0aGUgbGluZSB0byBnbyBiZWxvdyB0aGUgYm9keVxuXG4gICAgdmFyIGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJ1bmRlcmxpbmUtbGluZVwiLCBvcHRpb25zKTsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuc1xuXG4gICAgdmFyIGRlZmF1bHRSdWxlVGhpY2tuZXNzID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzO1xuICAgIHZhciB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwidG9wXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGlubmVyR3JvdXAuaGVpZ2h0LFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBkZWZhdWx0UnVsZVRoaWNrbmVzc1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbGluZVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogMyAqIGRlZmF1bHRSdWxlVGhpY2tuZXNzXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lckdyb3VwXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwidW5kZXJsaW5lXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG9wZXJhdG9yID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUoXCJcXHUyMDNlXCIpXSk7XG4gICAgb3BlcmF0b3Iuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdW5kZXJcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyksIG9wZXJhdG9yXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnR1bmRlclwiLCBcInRydWVcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ2Y2VudGVyXCIsXG4gIG5hbWVzOiBbXCJcXFxcdmNlbnRlclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJvcmlnaW5hbFwiXSxcbiAgICAvLyBJbiBMYVRlWCwgXFx2Y2VudGVyIGNhbiBhY3Qgb25seSBvbiBhIGJveC5cbiAgICBhbGxvd2VkSW5UZXh0OiBmYWxzZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ2Y2VudGVyXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGFyZ3NbMF1cbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGJvZHkgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG4gICAgdmFyIGF4aXNIZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDtcbiAgICB2YXIgZHkgPSAwLjUgKiAoYm9keS5oZWlnaHQgLSBheGlzSGVpZ2h0IC0gKGJvZHkuZGVwdGggKyBheGlzSGVpZ2h0KSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogZHksXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJvZHlcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFRoZXJlIGlzIG5vIHdheSB0byBkbyB0aGlzIGluIE1hdGhNTC5cbiAgICAvLyBXcml0ZSBhIGNsYXNzIGFzIGEgYnJlYWRjcnVtYiBpbiBjYXNlIHNvbWUgcG9zdC1wcm9jZXNzb3Igd2FudHNcbiAgICAvLyB0byBwZXJmb3JtIGEgdmNlbnRlciBhZGp1c3RtZW50LlxuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyldLCBbXCJ2Y2VudGVyXCJdKTtcbiAgfVxuXG59KTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInZlcmJcIixcbiAgbmFtZXM6IFtcIlxcXFx2ZXJiXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncykge1xuICAgIC8vIFxcdmVyYiBhbmQgXFx2ZXJiKiBhcmUgZGVhbHQgd2l0aCBkaXJlY3RseSBpbiBQYXJzZXIuanMuXG4gICAgLy8gSWYgd2UgZW5kIHVwIGhlcmUsIGl0J3MgYmVjYXVzZSBvZiBhIGZhaWx1cmUgdG8gbWF0Y2ggdGhlIHR3byBkZWxpbWl0ZXJzXG4gICAgLy8gaW4gdGhlIHJlZ2V4IGluIExleGVyLmpzLiAgTGFUZVggcmFpc2VzIHRoZSBmb2xsb3dpbmcgZXJyb3Igd2hlbiBcXHZlcmIgaXNcbiAgICAvLyB0ZXJtaW5hdGVkIGJ5IGVuZCBvZiBsaW5lIChvciBmaWxlKS5cbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlxcXFx2ZXJiIGVuZGVkIGJ5IGVuZCBvZiBsaW5lIGluc3RlYWQgb2YgbWF0Y2hpbmcgZGVsaW1pdGVyXCIpO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRleHQgPSBtYWtlVmVyYihncm91cCk7XG4gICAgdmFyIGJvZHkgPSBbXTsgLy8gXFx2ZXJiIGVudGVycyB0ZXh0IG1vZGUgYW5kIHRoZXJlZm9yZSBpcyBzaXplZCBsaWtlIFxcdGV4dHN0eWxlXG5cbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS50ZXh0KCkpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHRleHRbaV07XG5cbiAgICAgIGlmIChjID09PSAnficpIHtcbiAgICAgICAgYyA9ICdcXFxcdGV4dGFzY2lpdGlsZGUnO1xuICAgICAgfVxuXG4gICAgICBib2R5LnB1c2goYnVpbGRDb21tb24ubWFrZVN5bWJvbChjLCBcIlR5cGV3cml0ZXItUmVndWxhclwiLCBncm91cC5tb2RlLCBuZXdPcHRpb25zLCBbXCJtb3JkXCIsIFwidGV4dHR0XCJdKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJ0ZXh0XCJdLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBidWlsZENvbW1vbi50cnlDb21iaW5lQ2hhcnMoYm9keSksIG5ld09wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGV4dCA9IG5ldyBtYXRoTUxUcmVlLlRleHROb2RlKG1ha2VWZXJiKGdyb3VwKSk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZXh0XCIsIFt0ZXh0XSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJtYXRodmFyaWFudFwiLCBcIm1vbm9zcGFjZVwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcbi8qKlxuICogQ29udmVydHMgdmVyYiBncm91cCBpbnRvIGJvZHkgc3RyaW5nLlxuICpcbiAqIFxcdmVyYiogcmVwbGFjZXMgZWFjaCBzcGFjZSB3aXRoIGFuIG9wZW4gYm94IFxcdTI0MjNcbiAqIFxcdmVyYiByZXBsYWNlcyBlYWNoIHNwYWNlIHdpdGggYSBuby1icmVhayBzcGFjZSBcXHhBMFxuICovXG5cbnZhciBtYWtlVmVyYiA9IGdyb3VwID0+IGdyb3VwLmJvZHkucmVwbGFjZSgvIC9nLCBncm91cC5zdGFyID8gJ1xcdTI0MjMnIDogJ1xceEEwJyk7XG5cbi8qKiBJbmNsdWRlIHRoaXMgdG8gZW5zdXJlIHRoYXQgYWxsIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4gKi9cbnZhciBmdW5jdGlvbnMgPSBfZnVuY3Rpb25zO1xuXG4vKipcbiAqIFRoZSBMZXhlciBjbGFzcyBoYW5kbGVzIHRva2VuaXppbmcgdGhlIGlucHV0IGluIHZhcmlvdXMgd2F5cy4gU2luY2Ugb3VyXG4gKiBwYXJzZXIgZXhwZWN0cyB1cyB0byBiZSBhYmxlIHRvIGJhY2t0cmFjaywgdGhlIGxleGVyIGFsbG93cyBsZXhpbmcgZnJvbSBhbnlcbiAqIGdpdmVuIHN0YXJ0aW5nIHBvaW50LlxuICpcbiAqIEl0cyBtYWluIGV4cG9zZWQgZnVuY3Rpb24gaXMgdGhlIGBsZXhgIGZ1bmN0aW9uLCB3aGljaCB0YWtlcyBhIHBvc2l0aW9uIHRvXG4gKiBsZXggZnJvbSBhbmQgYSB0eXBlIG9mIHRva2VuIHRvIGxleC4gSXQgZGVmZXJzIHRvIHRoZSBhcHByb3ByaWF0ZSBgX2lubmVyTGV4YFxuICogZnVuY3Rpb24uXG4gKlxuICogVGhlIHZhcmlvdXMgYF9pbm5lckxleGAgZnVuY3Rpb25zIHBlcmZvcm0gdGhlIGFjdHVhbCBsZXhpbmcgb2YgZGlmZmVyZW50XG4gKiBraW5kcy5cbiAqL1xuXG4vKiBUaGUgZm9sbG93aW5nIHRva2VuUmVnZXhcbiAqIC0gbWF0Y2hlcyB0eXBpY2FsIHdoaXRlc3BhY2UgKGJ1dCBub3QgTkJTUCBldGMuKSB1c2luZyBpdHMgZmlyc3QgZ3JvdXBcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYW55IGNvbnRyb2wgY2hhcmFjdGVyIFxceDAwLVxceDFmIGV4Y2VwdCB3aGl0ZXNwYWNlXG4gKiAtIGRvZXMgbm90IG1hdGNoIGEgYmFyZSBiYWNrc2xhc2hcbiAqIC0gbWF0Y2hlcyBhbnkgQVNDSUkgY2hhcmFjdGVyIGV4Y2VwdCB0aG9zZSBqdXN0IG1lbnRpb25lZFxuICogLSBkb2VzIG5vdCBtYXRjaCB0aGUgQk1QIHByaXZhdGUgdXNlIGFyZWEgXFx1RTAwMC1cXHVGOEZGXG4gKiAtIGRvZXMgbm90IG1hdGNoIGJhcmUgc3Vycm9nYXRlIGNvZGUgdW5pdHNcbiAqIC0gbWF0Y2hlcyBhbnkgQk1QIGNoYXJhY3RlciBleGNlcHQgZm9yIHRob3NlIGp1c3QgZGVzY3JpYmVkXG4gKiAtIG1hdGNoZXMgYW55IHZhbGlkIFVuaWNvZGUgc3Vycm9nYXRlIHBhaXJcbiAqIC0gbWF0Y2hlcyBhIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcbiAqIC0gbWF0Y2hlcyBhIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBsZXR0ZXJzIHRoZW4gd2hpdGVzcGFjZVxuICogLSBtYXRjaGVzIGEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGFueSBCTVAgY2hhcmFjdGVyXG4gKiBDYXB0dXJpbmcgZ3JvdXBzOlxuICogICBbMV0gcmVndWxhciB3aGl0ZXNwYWNlXG4gKiAgIFsyXSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgd2hpdGVzcGFjZVxuICogICBbM10gYW55dGhpbmcgZWxzZSwgd2hpY2ggbWF5IGluY2x1ZGU6XG4gKiAgICAgWzRdIGxlZnQgY2hhcmFjdGVyIG9mIFxcdmVyYipcbiAqICAgICBbNV0gbGVmdCBjaGFyYWN0ZXIgb2YgXFx2ZXJiXG4gKiAgICAgWzZdIGJhY2tzbGFzaCBmb2xsb3dlZCBieSB3b3JkLCBleGNsdWRpbmcgYW55IHRyYWlsaW5nIHdoaXRlc3BhY2VcbiAqIEp1c3QgYmVjYXVzZSB0aGUgTGV4ZXIgbWF0Y2hlcyBzb21ldGhpbmcgZG9lc24ndCBtZWFuIGl0J3MgdmFsaWQgaW5wdXQ6XG4gKiBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBmdW5jdGlvbiBvciBzeW1ib2wgZGVmaW5pdGlvbiwgdGhlIFBhcnNlciB3aWxsXG4gKiBzdGlsbCByZWplY3QgdGhlIGlucHV0LlxuICovXG52YXIgc3BhY2VSZWdleFN0cmluZyA9IFwiWyBcXHJcXG5cXHRdXCI7XG52YXIgY29udHJvbFdvcmRSZWdleFN0cmluZyA9IFwiXFxcXFxcXFxbYS16QS1aQF0rXCI7XG52YXIgY29udHJvbFN5bWJvbFJlZ2V4U3RyaW5nID0gXCJcXFxcXFxcXFteXFx1RDgwMC1cXHVERkZGXVwiO1xudmFyIGNvbnRyb2xXb3JkV2hpdGVzcGFjZVJlZ2V4U3RyaW5nID0gXCIoXCIgKyBjb250cm9sV29yZFJlZ2V4U3RyaW5nICsgXCIpXCIgKyBzcGFjZVJlZ2V4U3RyaW5nICsgXCIqXCI7XG52YXIgY29udHJvbFNwYWNlUmVnZXhTdHJpbmcgPSBcIlxcXFxcXFxcKFxcbnxbIFxcclxcdF0rXFxuPylbIFxcclxcdF0qXCI7XG52YXIgY29tYmluaW5nRGlhY3JpdGljYWxNYXJrU3RyaW5nID0gXCJbXFx1MDMwMC1cXHUwMzZmXVwiO1xudmFyIGNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya3NFbmRSZWdleCA9IG5ldyBSZWdFeHAoY29tYmluaW5nRGlhY3JpdGljYWxNYXJrU3RyaW5nICsgXCIrJFwiKTtcbnZhciB0b2tlblJlZ2V4U3RyaW5nID0gXCIoXCIgKyBzcGFjZVJlZ2V4U3RyaW5nICsgXCIrKXxcIiArICggLy8gd2hpdGVzcGFjZVxuY29udHJvbFNwYWNlUmVnZXhTdHJpbmcgKyBcInxcIikgKyAvLyBcXHdoaXRlc3BhY2VcblwiKFshLVxcXFxbXFxcXF0tXFx1MjAyN1xcdTIwMkEtXFx1RDdGRlxcdUY5MDAtXFx1RkZGRl1cIiArICggLy8gc2luZ2xlIGNvZGVwb2ludFxuY29tYmluaW5nRGlhY3JpdGljYWxNYXJrU3RyaW5nICsgXCIqXCIpICsgLy8gLi4ucGx1cyBhY2NlbnRzXG5cInxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdXCIgKyAoIC8vIHN1cnJvZ2F0ZSBwYWlyXG5jb21iaW5pbmdEaWFjcml0aWNhbE1hcmtTdHJpbmcgKyBcIipcIikgKyAvLyAuLi5wbHVzIGFjY2VudHNcblwifFxcXFxcXFxcdmVyYlxcXFwqKFteXSkuKj9cXFxcNFwiICsgLy8gXFx2ZXJiKlxuXCJ8XFxcXFxcXFx2ZXJiKFteKmEtekEtWl0pLio/XFxcXDVcIiArICggLy8gXFx2ZXJiIHVuc3RhcnJlZFxuXCJ8XCIgKyBjb250cm9sV29yZFdoaXRlc3BhY2VSZWdleFN0cmluZykgKyAoIC8vIFxcbWFjcm9OYW1lICsgc3BhY2VzXG5cInxcIiArIGNvbnRyb2xTeW1ib2xSZWdleFN0cmluZyArIFwiKVwiKTsgLy8gXFxcXCwgXFwnLCBldGMuXG5cbi8qKiBNYWluIExleGVyIGNsYXNzICovXG5cbmNsYXNzIExleGVyIHtcbiAgLy8gQ2F0ZWdvcnkgY29kZXMuIFRoZSBsZXhlciBvbmx5IHN1cHBvcnRzIGNvbW1lbnQgY2hhcmFjdGVycyAoMTQpIGZvciBub3cuXG4gIC8vIE1hY3JvRXhwYW5kZXIgYWRkaXRpb25hbGx5IGRpc3Rpbmd1aXNoZXMgYWN0aXZlICgxMykuXG4gIGNvbnN0cnVjdG9yKGlucHV0LCBzZXR0aW5ncykge1xuICAgIHRoaXMuaW5wdXQgPSB2b2lkIDA7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHZvaWQgMDtcbiAgICB0aGlzLnRva2VuUmVnZXggPSB2b2lkIDA7XG4gICAgdGhpcy5jYXRjb2RlcyA9IHZvaWQgMDtcbiAgICAvLyBTZXBhcmF0ZSBhY2NlbnRzIGZyb20gY2hhcmFjdGVyc1xuICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy50b2tlblJlZ2V4ID0gbmV3IFJlZ0V4cCh0b2tlblJlZ2V4U3RyaW5nLCAnZycpO1xuICAgIHRoaXMuY2F0Y29kZXMgPSB7XG4gICAgICBcIiVcIjogMTQsXG4gICAgICAvLyBjb21tZW50IGNoYXJhY3RlclxuICAgICAgXCJ+XCI6IDEzIC8vIGFjdGl2ZSBjaGFyYWN0ZXJcblxuICAgIH07XG4gIH1cblxuICBzZXRDYXRjb2RlKGNoYXIsIGNvZGUpIHtcbiAgICB0aGlzLmNhdGNvZGVzW2NoYXJdID0gY29kZTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBsZXhlcyBhIHNpbmdsZSB0b2tlbi5cbiAgICovXG5cblxuICBsZXgoKSB7XG4gICAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgICB2YXIgcG9zID0gdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleDtcblxuICAgIGlmIChwb3MgPT09IGlucHV0Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ldyBUb2tlbihcIkVPRlwiLCBuZXcgU291cmNlTG9jYXRpb24odGhpcywgcG9zLCBwb3MpKTtcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2ggPSB0aGlzLnRva2VuUmVnZXguZXhlYyhpbnB1dCk7XG5cbiAgICBpZiAobWF0Y2ggPT09IG51bGwgfHwgbWF0Y2guaW5kZXggIT09IHBvcykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVbmV4cGVjdGVkIGNoYXJhY3RlcjogJ1wiICsgaW5wdXRbcG9zXSArIFwiJ1wiLCBuZXcgVG9rZW4oaW5wdXRbcG9zXSwgbmV3IFNvdXJjZUxvY2F0aW9uKHRoaXMsIHBvcywgcG9zICsgMSkpKTtcbiAgICB9XG5cbiAgICB2YXIgdGV4dCA9IG1hdGNoWzZdIHx8IG1hdGNoWzNdIHx8IChtYXRjaFsyXSA/IFwiXFxcXCBcIiA6IFwiIFwiKTtcblxuICAgIGlmICh0aGlzLmNhdGNvZGVzW3RleHRdID09PSAxNCkge1xuICAgICAgLy8gY29tbWVudCBjaGFyYWN0ZXJcbiAgICAgIHZhciBubEluZGV4ID0gaW5wdXQuaW5kZXhPZignXFxuJywgdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCk7XG5cbiAgICAgIGlmIChubEluZGV4ID09PSAtMSkge1xuICAgICAgICB0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4ID0gaW5wdXQubGVuZ3RoOyAvLyBFT0ZcblxuICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcImNvbW1lbnRBdEVuZFwiLCBcIiUgY29tbWVudCBoYXMgbm8gdGVybWluYXRpbmcgbmV3bGluZTsgTGFUZVggd291bGQgXCIgKyBcImZhaWwgYmVjYXVzZSBvZiBjb21tZW50aW5nIHRoZSBlbmQgb2YgbWF0aCBtb2RlIChlLmcuICQpXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCA9IG5sSW5kZXggKyAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRva2VuKHRleHQsIG5ldyBTb3VyY2VMb2NhdGlvbih0aGlzLCBwb3MsIHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXgpKTtcbiAgfVxuXG59XG5cbi8qKlxuICogQSBgTmFtZXNwYWNlYCByZWZlcnMgdG8gYSBzcGFjZSBvZiBuYW1lYWJsZSB0aGluZ3MgbGlrZSBtYWNyb3Mgb3IgbGVuZ3RocyxcbiAqIHdoaWNoIGNhbiBiZSBgc2V0YCBlaXRoZXIgZ2xvYmFsbHkgb3IgbG9jYWwgdG8gYSBuZXN0ZWQgZ3JvdXAsIHVzaW5nIGFuXG4gKiB1bmRvIHN0YWNrIHNpbWlsYXIgdG8gaG93IFRlWCBpbXBsZW1lbnRzIHRoaXMgZnVuY3Rpb25hbGl0eS5cbiAqIFBlcmZvcm1hbmNlLXdpc2UsIGBnZXRgIGFuZCBsb2NhbCBgc2V0YCB0YWtlIGNvbnN0YW50IHRpbWUsIHdoaWxlIGdsb2JhbFxuICogYHNldGAgdGFrZXMgdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlIGRlcHRoIG9mIGdyb3VwIG5lc3RpbmcuXG4gKi9cbmNsYXNzIE5hbWVzcGFjZSB7XG4gIC8qKlxuICAgKiBCb3RoIGFyZ3VtZW50cyBhcmUgb3B0aW9uYWwuICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gb2JqZWN0IG9mXG4gICAqIGJ1aWx0LWluIG1hcHBpbmdzIHdoaWNoIG5ldmVyIGNoYW5nZS4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gICAqIG9mIGluaXRpYWwgKGdsb2JhbC1sZXZlbCkgbWFwcGluZ3MsIHdoaWNoIHdpbGwgY29uc3RhbnRseSBjaGFuZ2VcbiAgICogYWNjb3JkaW5nIHRvIGFueSBnbG9iYWwvdG9wLWxldmVsIGBzZXRgcyBkb25lLlxuICAgKi9cbiAgY29uc3RydWN0b3IoYnVpbHRpbnMsIGdsb2JhbE1hY3Jvcykge1xuICAgIGlmIChidWlsdGlucyA9PT0gdm9pZCAwKSB7XG4gICAgICBidWlsdGlucyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChnbG9iYWxNYWNyb3MgPT09IHZvaWQgMCkge1xuICAgICAgZ2xvYmFsTWFjcm9zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50ID0gdm9pZCAwO1xuICAgIHRoaXMuYnVpbHRpbnMgPSB2b2lkIDA7XG4gICAgdGhpcy51bmRlZlN0YWNrID0gdm9pZCAwO1xuICAgIHRoaXMuY3VycmVudCA9IGdsb2JhbE1hY3JvcztcbiAgICB0aGlzLmJ1aWx0aW5zID0gYnVpbHRpbnM7XG4gICAgdGhpcy51bmRlZlN0YWNrID0gW107XG4gIH1cbiAgLyoqXG4gICAqIFN0YXJ0IGEgbmV3IG5lc3RlZCBncm91cCwgYWZmZWN0aW5nIGZ1dHVyZSBsb2NhbCBgc2V0YHMuXG4gICAqL1xuXG5cbiAgYmVnaW5Hcm91cCgpIHtcbiAgICB0aGlzLnVuZGVmU3RhY2sucHVzaCh7fSk7XG4gIH1cbiAgLyoqXG4gICAqIEVuZCBjdXJyZW50IG5lc3RlZCBncm91cCwgcmVzdG9yaW5nIHZhbHVlcyBiZWZvcmUgdGhlIGdyb3VwIGJlZ2FuLlxuICAgKi9cblxuXG4gIGVuZEdyb3VwKCkge1xuICAgIGlmICh0aGlzLnVuZGVmU3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVuYmFsYW5jZWQgbmFtZXNwYWNlIGRlc3RydWN0aW9uOiBhdHRlbXB0IFwiICsgXCJ0byBwb3AgZ2xvYmFsIG5hbWVzcGFjZTsgcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnXCIpO1xuICAgIH1cblxuICAgIHZhciB1bmRlZnMgPSB0aGlzLnVuZGVmU3RhY2sucG9wKCk7XG5cbiAgICBmb3IgKHZhciB1bmRlZiBpbiB1bmRlZnMpIHtcbiAgICAgIGlmICh1bmRlZnMuaGFzT3duUHJvcGVydHkodW5kZWYpKSB7XG4gICAgICAgIGlmICh1bmRlZnNbdW5kZWZdID09IG51bGwpIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50W3VuZGVmXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRbdW5kZWZdID0gdW5kZWZzW3VuZGVmXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogRW5kcyBhbGwgY3VycmVudGx5IG5lc3RlZCBncm91cHMgKGlmIGFueSksIHJlc3RvcmluZyB2YWx1ZXMgYmVmb3JlIHRoZVxuICAgKiBncm91cHMgYmVnYW4uICBVc2VmdWwgaW4gY2FzZSBvZiBhbiBlcnJvciBpbiB0aGUgbWlkZGxlIG9mIHBhcnNpbmcuXG4gICAqL1xuXG5cbiAgZW5kR3JvdXBzKCkge1xuICAgIHdoaWxlICh0aGlzLnVuZGVmU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5lbmRHcm91cCgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRGV0ZWN0IHdoZXRoZXIgYG5hbWVgIGhhcyBhIGRlZmluaXRpb24uICBFcXVpdmFsZW50IHRvXG4gICAqIGBnZXQobmFtZSkgIT0gbnVsbGAuXG4gICAqL1xuXG5cbiAgaGFzKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KG5hbWUpIHx8IHRoaXMuYnVpbHRpbnMuaGFzT3duUHJvcGVydHkobmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG5hbWUsIG9yIGB1bmRlZmluZWRgIGlmIHRoZXJlIGlzIG5vIHZhbHVlLlxuICAgKlxuICAgKiBOb3RlOiBEbyBub3QgdXNlIGBpZiAobmFtZXNwYWNlLmdldCguLi4pKWAgdG8gZGV0ZWN0IHdoZXRoZXIgYSBtYWNyb1xuICAgKiBpcyBkZWZpbmVkLCBhcyB0aGUgZGVmaW5pdGlvbiBtYXkgYmUgdGhlIGVtcHR5IHN0cmluZyB3aGljaCBldmFsdWF0ZXNcbiAgICogdG8gYGZhbHNlYCBpbiBKYXZhU2NyaXB0LiAgVXNlIGBpZiAobmFtZXNwYWNlLmdldCguLi4pICE9IG51bGwpYCBvclxuICAgKiBgaWYgKG5hbWVzcGFjZS5oYXMoLi4uKSlgLlxuICAgKi9cblxuXG4gIGdldChuYW1lKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbHRpbnNbbmFtZV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBuYW1lLCBhbmQgb3B0aW9uYWxseSBzZXQgaXQgZ2xvYmFsbHkgdG9vLlxuICAgKiBMb2NhbCBzZXQoKSBzZXRzIHRoZSBjdXJyZW50IHZhbHVlIGFuZCAod2hlbiBhcHByb3ByaWF0ZSkgYWRkcyBhbiB1bmRvXG4gICAqIG9wZXJhdGlvbiB0byB0aGUgdW5kbyBzdGFjay4gIEdsb2JhbCBzZXQoKSBtYXkgY2hhbmdlIHRoZSB1bmRvXG4gICAqIG9wZXJhdGlvbiBhdCBldmVyeSBsZXZlbCwgc28gdGFrZXMgdGltZSBsaW5lYXIgaW4gdGhlaXIgbnVtYmVyLlxuICAgKiBBIHZhbHVlIG9mIHVuZGVmaW5lZCBtZWFucyB0byBkZWxldGUgZXhpc3RpbmcgZGVmaW5pdGlvbnMuXG4gICAqL1xuXG5cbiAgc2V0KG5hbWUsIHZhbHVlLCBnbG9iYWwpIHtcbiAgICBpZiAoZ2xvYmFsID09PSB2b2lkIDApIHtcbiAgICAgIGdsb2JhbCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChnbG9iYWwpIHtcbiAgICAgIC8vIEdsb2JhbCBzZXQgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIGluIGFsbCBncm91cHMuICBTaW11bGF0ZSB0aGlzXG4gICAgICAvLyBieSBkZXN0cm95aW5nIGFueSB1bmRvcyBjdXJyZW50bHkgc2NoZWR1bGVkIGZvciB0aGlzIG5hbWUsXG4gICAgICAvLyBhbmQgYWRkaW5nIGFuIHVuZG8gd2l0aCB0aGUgKm5ldyogdmFsdWUgKGluIGNhc2UgaXQgbGF0ZXIgZ2V0c1xuICAgICAgLy8gbG9jYWxseSByZXNldCB3aXRoaW4gdGhpcyBlbnZpcm9ubWVudCkuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudW5kZWZTdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICBkZWxldGUgdGhpcy51bmRlZlN0YWNrW2ldW25hbWVdO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy51bmRlZlN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy51bmRlZlN0YWNrW3RoaXMudW5kZWZTdGFjay5sZW5ndGggLSAxXVtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVbmRvIHRoaXMgc2V0IGF0IGVuZCBvZiB0aGlzIGdyb3VwIChwb3NzaWJseSB0byBgdW5kZWZpbmVkYCksXG4gICAgICAvLyB1bmxlc3MgYW4gdW5kbyBpcyBhbHJlYWR5IGluIHBsYWNlLCBpbiB3aGljaCBjYXNlIHRoYXQgb2xkZXJcbiAgICAgIC8vIHZhbHVlIGlzIHRoZSBjb3JyZWN0IG9uZS5cbiAgICAgIHZhciB0b3AgPSB0aGlzLnVuZGVmU3RhY2tbdGhpcy51bmRlZlN0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAodG9wICYmICF0b3AuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgdG9wW25hbWVdID0gdGhpcy5jdXJyZW50W25hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBkZWxldGUgdGhpcy5jdXJyZW50W25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxufVxuXG4vKipcbiAqIFByZWRlZmluZWQgbWFjcm9zIGZvciBLYVRlWC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHNvbWUgY29tbWFuZHMgaW4gdGVybXMgb2Ygb3RoZXJzLlxuICovXG52YXIgbWFjcm9zID0gX21hY3Jvcztcbi8vIG1hY3JvIHRvb2xzXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5vZXhwYW5kXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIC8vIFRoZSBleHBhbnNpb24gaXMgdGhlIHRva2VuIGl0c2VsZjsgYnV0IHRoYXQgdG9rZW4gaXMgaW50ZXJwcmV0ZWRcbiAgLy8gYXMgaWYgaXRzIG1lYW5pbmcgd2VyZSDigJhcXHJlbGF44oCZIGlmIGl0IGlzIGEgY29udHJvbCBzZXF1ZW5jZSB0aGF0XG4gIC8vIHdvdWxkIG9yZGluYXJpbHkgYmUgZXhwYW5kZWQgYnkgVGVY4oCZcyBleHBhbnNpb24gcnVsZXMuXG4gIHZhciB0ID0gY29udGV4dC5wb3BUb2tlbigpO1xuXG4gIGlmIChjb250ZXh0LmlzRXhwYW5kYWJsZSh0LnRleHQpKSB7XG4gICAgdC5ub2V4cGFuZCA9IHRydWU7XG4gICAgdC50cmVhdEFzUmVsYXggPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b2tlbnM6IFt0XSxcbiAgICBudW1BcmdzOiAwXG4gIH07XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGV4cGFuZGFmdGVyXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIC8vIFRlWCBmaXJzdCByZWFkcyB0aGUgdG9rZW4gdGhhdCBjb21lcyBpbW1lZGlhdGVseSBhZnRlciBcXGV4cGFuZGFmdGVyLFxuICAvLyB3aXRob3V0IGV4cGFuZGluZyBpdDsgbGV04oCZcyBjYWxsIHRoaXMgdG9rZW4gdC4gVGhlbiBUZVggcmVhZHMgdGhlXG4gIC8vIHRva2VuIHRoYXQgY29tZXMgYWZ0ZXIgdCAoYW5kIHBvc3NpYmx5IG1vcmUgdG9rZW5zLCBpZiB0aGF0IHRva2VuXG4gIC8vIGhhcyBhbiBhcmd1bWVudCksIHJlcGxhY2luZyBpdCBieSBpdHMgZXhwYW5zaW9uLiBGaW5hbGx5IFRlWCBwdXRzXG4gIC8vIHQgYmFjayBpbiBmcm9udCBvZiB0aGF0IGV4cGFuc2lvbi5cbiAgdmFyIHQgPSBjb250ZXh0LnBvcFRva2VuKCk7XG4gIGNvbnRleHQuZXhwYW5kT25jZSh0cnVlKTsgLy8gZXhwYW5kIG9ubHkgYW4gZXhwYW5kYWJsZSB0b2tlblxuXG4gIHJldHVybiB7XG4gICAgdG9rZW5zOiBbdF0sXG4gICAgbnVtQXJnczogMFxuICB9O1xufSk7IC8vIExhVGVYJ3MgXFxAZmlyc3RvZnR3b3sjMX17IzJ9IGV4cGFuZHMgdG8gIzEsIHNraXBwaW5nICMyXG4vLyBUZVggc291cmNlOiBcXGxvbmdcXGRlZlxcQGZpcnN0b2Z0d28jMSMyeyMxfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxAZmlyc3RvZnR3b1wiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgYXJncyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMik7XG4gIHJldHVybiB7XG4gICAgdG9rZW5zOiBhcmdzWzBdLFxuICAgIG51bUFyZ3M6IDBcbiAgfTtcbn0pOyAvLyBMYVRlWCdzIFxcQHNlY29uZG9mdHdveyMxfXsjMn0gZXhwYW5kcyB0byAjMiwgc2tpcHBpbmcgIzFcbi8vIFRlWCBzb3VyY2U6IFxcbG9uZ1xcZGVmXFxAc2Vjb25kb2Z0d28jMSMyeyMyfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxAc2Vjb25kb2Z0d29cIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIGFyZ3MgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDIpO1xuICByZXR1cm4ge1xuICAgIHRva2VuczogYXJnc1sxXSxcbiAgICBudW1BcmdzOiAwXG4gIH07XG59KTsgLy8gTGFUZVgncyBcXEBpZm5leHRjaGFyeyMxfXsjMn17IzN9IGxvb2tzIGFoZWFkIHRvIHRoZSBuZXh0ICh1bmV4cGFuZGVkKVxuLy8gc3ltYm9sIHRoYXQgaXNuJ3QgYSBzcGFjZSwgY29uc3VtaW5nIGFueSBzcGFjZXMgYnV0IG5vdCBjb25zdW1pbmcgdGhlXG4vLyBmaXJzdCBub25zcGFjZSBjaGFyYWN0ZXIuICBJZiB0aGF0IG5vbnNwYWNlIGNoYXJhY3RlciBtYXRjaGVzICMxLCB0aGVuXG4vLyB0aGUgbWFjcm8gZXhwYW5kcyB0byAjMjsgb3RoZXJ3aXNlLCBpdCBleHBhbmRzIHRvICMzLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxAaWZuZXh0Y2hhclwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgYXJncyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMyk7IC8vIHN5bWJvbCwgaWYsIGVsc2VcblxuICBjb250ZXh0LmNvbnN1bWVTcGFjZXMoKTtcbiAgdmFyIG5leHRUb2tlbiA9IGNvbnRleHQuZnV0dXJlKCk7XG5cbiAgaWYgKGFyZ3NbMF0ubGVuZ3RoID09PSAxICYmIGFyZ3NbMF1bMF0udGV4dCA9PT0gbmV4dFRva2VuLnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzFdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuczogYXJnc1syXSxcbiAgICAgIG51bUFyZ3M6IDBcbiAgICB9O1xuICB9XG59KTsgLy8gTGFUZVgncyBcXEBpZnN0YXJ7IzF9eyMyfSBsb29rcyBhaGVhZCB0byB0aGUgbmV4dCAodW5leHBhbmRlZCkgc3ltYm9sLlxuLy8gSWYgaXQgaXMgYCpgLCB0aGVuIGl0IGNvbnN1bWVzIHRoZSBzeW1ib2wsIGFuZCB0aGUgbWFjcm8gZXhwYW5kcyB0byAjMTtcbi8vIG90aGVyd2lzZSwgdGhlIG1hY3JvIGV4cGFuZHMgdG8gIzIgKHdpdGhvdXQgY29uc3VtaW5nIHRoZSBzeW1ib2wpLlxuLy8gVGVYIHNvdXJjZTogXFxkZWZcXEBpZnN0YXIjMXtcXEBpZm5leHRjaGFyICp7XFxAZmlyc3RvZnR3b3sjMX19fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxAaWZzdGFyXCIsIFwiXFxcXEBpZm5leHRjaGFyICp7XFxcXEBmaXJzdG9mdHdveyMxfX1cIik7IC8vIExhVGVYJ3MgXFxUZXh0T3JNYXRoeyMxfXsjMn0gZXhwYW5kcyB0byAjMSBpbiB0ZXh0IG1vZGUsICMyIGluIG1hdGggbW9kZVxuXG5kZWZpbmVNYWNybyhcIlxcXFxUZXh0T3JNYXRoXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBhcmdzID0gY29udGV4dC5jb25zdW1lQXJncygyKTtcblxuICBpZiAoY29udGV4dC5tb2RlID09PSAndGV4dCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzBdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuczogYXJnc1sxXSxcbiAgICAgIG51bUFyZ3M6IDBcbiAgICB9O1xuICB9XG59KTsgLy8gTG9va3VwIHRhYmxlIGZvciBwYXJzaW5nIG51bWJlcnMgaW4gYmFzZSA4IHRocm91Z2ggMTZcblxudmFyIGRpZ2l0VG9OdW1iZXIgPSB7XG4gIFwiMFwiOiAwLFxuICBcIjFcIjogMSxcbiAgXCIyXCI6IDIsXG4gIFwiM1wiOiAzLFxuICBcIjRcIjogNCxcbiAgXCI1XCI6IDUsXG4gIFwiNlwiOiA2LFxuICBcIjdcIjogNyxcbiAgXCI4XCI6IDgsXG4gIFwiOVwiOiA5LFxuICBcImFcIjogMTAsXG4gIFwiQVwiOiAxMCxcbiAgXCJiXCI6IDExLFxuICBcIkJcIjogMTEsXG4gIFwiY1wiOiAxMixcbiAgXCJDXCI6IDEyLFxuICBcImRcIjogMTMsXG4gIFwiRFwiOiAxMyxcbiAgXCJlXCI6IDE0LFxuICBcIkVcIjogMTQsXG4gIFwiZlwiOiAxNSxcbiAgXCJGXCI6IDE1XG59OyAvLyBUZVggXFxjaGFyIG1ha2VzIGEgbGl0ZXJhbCBjaGFyYWN0ZXIgKGNhdGNvZGUgMTIpIHVzaW5nIHRoZSBmb2xsb3dpbmcgZm9ybXM6XG4vLyAoc2VlIFRoZSBUZVhCb29rLCBwLiA0Mylcbi8vICAgXFxjaGFyMTIzICAtLSBkZWNpbWFsXG4vLyAgIFxcY2hhcicxMjMgLS0gb2N0YWxcbi8vICAgXFxjaGFyXCIxMjMgLS0gaGV4XG4vLyAgIFxcY2hhcmB4ICAgLS0gY2hhcmFjdGVyIHRoYXQgY2FuIGJlIHdyaXR0ZW4gKGkuZS4gaXNuJ3QgYWN0aXZlKVxuLy8gICBcXGNoYXJgXFx4ICAtLSBjaGFyYWN0ZXIgdGhhdCBjYW5ub3QgYmUgd3JpdHRlbiAoZS5nLiAlKVxuLy8gVGhlc2UgYWxsIHJlZmVyIHRvIGNoYXJhY3RlcnMgZnJvbSB0aGUgZm9udCwgc28gd2UgdHVybiB0aGVtIGludG8gc3BlY2lhbFxuLy8gY2FsbHMgdG8gYSBmdW5jdGlvbiBcXEBjaGFyIGRlYWx0IHdpdGggaW4gdGhlIFBhcnNlci5cblxuZGVmaW5lTWFjcm8oXCJcXFxcY2hhclwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgdG9rZW4gPSBjb250ZXh0LnBvcFRva2VuKCk7XG4gIHZhciBiYXNlO1xuICB2YXIgbnVtYmVyID0gJyc7XG5cbiAgaWYgKHRva2VuLnRleHQgPT09IFwiJ1wiKSB7XG4gICAgYmFzZSA9IDg7XG4gICAgdG9rZW4gPSBjb250ZXh0LnBvcFRva2VuKCk7XG4gIH0gZWxzZSBpZiAodG9rZW4udGV4dCA9PT0gJ1wiJykge1xuICAgIGJhc2UgPSAxNjtcbiAgICB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgfSBlbHNlIGlmICh0b2tlbi50ZXh0ID09PSBcImBcIikge1xuICAgIHRva2VuID0gY29udGV4dC5wb3BUb2tlbigpO1xuXG4gICAgaWYgKHRva2VuLnRleHRbMF0gPT09IFwiXFxcXFwiKSB7XG4gICAgICBudW1iZXIgPSB0b2tlbi50ZXh0LmNoYXJDb2RlQXQoMSk7XG4gICAgfSBlbHNlIGlmICh0b2tlbi50ZXh0ID09PSBcIkVPRlwiKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlxcXFxjaGFyYCBtaXNzaW5nIGFyZ3VtZW50XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1iZXIgPSB0b2tlbi50ZXh0LmNoYXJDb2RlQXQoMCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJhc2UgPSAxMDtcbiAgfVxuXG4gIGlmIChiYXNlKSB7XG4gICAgLy8gUGFyc2UgYSBudW1iZXIgaW4gdGhlIGdpdmVuIGJhc2UsIHN0YXJ0aW5nIHdpdGggZmlyc3QgYHRva2VuYC5cbiAgICBudW1iZXIgPSBkaWdpdFRvTnVtYmVyW3Rva2VuLnRleHRdO1xuXG4gICAgaWYgKG51bWJlciA9PSBudWxsIHx8IG51bWJlciA+PSBiYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgYmFzZS1cIiArIGJhc2UgKyBcIiBkaWdpdCBcIiArIHRva2VuLnRleHQpO1xuICAgIH1cblxuICAgIHZhciBkaWdpdDtcblxuICAgIHdoaWxlICgoZGlnaXQgPSBkaWdpdFRvTnVtYmVyW2NvbnRleHQuZnV0dXJlKCkudGV4dF0pICE9IG51bGwgJiYgZGlnaXQgPCBiYXNlKSB7XG4gICAgICBudW1iZXIgKj0gYmFzZTtcbiAgICAgIG51bWJlciArPSBkaWdpdDtcbiAgICAgIGNvbnRleHQucG9wVG9rZW4oKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gXCJcXFxcQGNoYXJ7XCIgKyBudW1iZXIgKyBcIn1cIjtcbn0pOyAvLyBcXG5ld2NvbW1hbmR7XFxtYWNyb31bYXJnc117ZGVmaW5pdGlvbn1cbi8vIFxccmVuZXdjb21tYW5ke1xcbWFjcm99W2FyZ3Nde2RlZmluaXRpb259XG4vLyBUT0RPOiBPcHRpb25hbCBhcmd1bWVudHM6IFxcbmV3Y29tbWFuZHtcXG1hY3JvfVthcmdzXVtkZWZhdWx0XXtkZWZpbml0aW9ufVxuXG52YXIgbmV3Y29tbWFuZCA9IChjb250ZXh0LCBleGlzdHNPSywgbm9uZXhpc3RzT0spID0+IHtcbiAgdmFyIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZygpLnRva2VucztcblxuICBpZiAoYXJnLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXG5ld2NvbW1hbmQncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgbWFjcm8gbmFtZVwiKTtcbiAgfVxuXG4gIHZhciBuYW1lID0gYXJnWzBdLnRleHQ7XG4gIHZhciBleGlzdHMgPSBjb250ZXh0LmlzRGVmaW5lZChuYW1lKTtcblxuICBpZiAoZXhpc3RzICYmICFleGlzdHNPSykge1xuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXG5ld2NvbW1hbmR7XCIgKyBuYW1lICsgXCJ9IGF0dGVtcHRpbmcgdG8gcmVkZWZpbmUgXCIgKyAobmFtZSArIFwiOyB1c2UgXFxcXHJlbmV3Y29tbWFuZFwiKSk7XG4gIH1cblxuICBpZiAoIWV4aXN0cyAmJiAhbm9uZXhpc3RzT0spIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlxcXFxyZW5ld2NvbW1hbmR7XCIgKyBuYW1lICsgXCJ9IHdoZW4gY29tbWFuZCBcIiArIG5hbWUgKyBcIiBcIiArIFwiZG9lcyBub3QgeWV0IGV4aXN0OyB1c2UgXFxcXG5ld2NvbW1hbmRcIik7XG4gIH1cblxuICB2YXIgbnVtQXJncyA9IDA7XG4gIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZygpLnRva2VucztcblxuICBpZiAoYXJnLmxlbmd0aCA9PT0gMSAmJiBhcmdbMF0udGV4dCA9PT0gXCJbXCIpIHtcbiAgICB2YXIgYXJnVGV4dCA9ICcnO1xuICAgIHZhciB0b2tlbiA9IGNvbnRleHQuZXhwYW5kTmV4dFRva2VuKCk7XG5cbiAgICB3aGlsZSAodG9rZW4udGV4dCAhPT0gXCJdXCIgJiYgdG9rZW4udGV4dCAhPT0gXCJFT0ZcIikge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHByb3Blcmx5IGV4cGFuZCBhcmcsIGUuZy4sIGlnbm9yZSB7fXNcbiAgICAgIGFyZ1RleHQgKz0gdG9rZW4udGV4dDtcbiAgICAgIHRva2VuID0gY29udGV4dC5leHBhbmROZXh0VG9rZW4oKTtcbiAgICB9XG5cbiAgICBpZiAoIWFyZ1RleHQubWF0Y2goL15cXHMqWzAtOV0rXFxzKiQvKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHM6IFwiICsgYXJnVGV4dCk7XG4gICAgfVxuXG4gICAgbnVtQXJncyA9IHBhcnNlSW50KGFyZ1RleHQpO1xuICAgIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZygpLnRva2VucztcbiAgfSAvLyBGaW5hbCBhcmcgaXMgdGhlIGV4cGFuc2lvbiBvZiB0aGUgbWFjcm9cblxuXG4gIGNvbnRleHQubWFjcm9zLnNldChuYW1lLCB7XG4gICAgdG9rZW5zOiBhcmcsXG4gICAgbnVtQXJnc1xuICB9KTtcbiAgcmV0dXJuICcnO1xufTtcblxuZGVmaW5lTWFjcm8oXCJcXFxcbmV3Y29tbWFuZFwiLCBjb250ZXh0ID0+IG5ld2NvbW1hbmQoY29udGV4dCwgZmFsc2UsIHRydWUpKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlbmV3Y29tbWFuZFwiLCBjb250ZXh0ID0+IG5ld2NvbW1hbmQoY29udGV4dCwgdHJ1ZSwgZmFsc2UpKTtcbmRlZmluZU1hY3JvKFwiXFxcXHByb3ZpZGVjb21tYW5kXCIsIGNvbnRleHQgPT4gbmV3Y29tbWFuZChjb250ZXh0LCB0cnVlLCB0cnVlKSk7IC8vIHRlcm1pbmFsIChjb25zb2xlKSB0b29sc1xuXG5kZWZpbmVNYWNybyhcIlxcXFxtZXNzYWdlXCIsIGNvbnRleHQgPT4ge1xuICB2YXIgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblxuICBjb25zb2xlLmxvZyhhcmcucmV2ZXJzZSgpLm1hcCh0b2tlbiA9PiB0b2tlbi50ZXh0KS5qb2luKFwiXCIpKTtcbiAgcmV0dXJuICcnO1xufSk7XG5kZWZpbmVNYWNybyhcIlxcXFxlcnJtZXNzYWdlXCIsIGNvbnRleHQgPT4ge1xuICB2YXIgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblxuICBjb25zb2xlLmVycm9yKGFyZy5yZXZlcnNlKCkubWFwKHRva2VuID0+IHRva2VuLnRleHQpLmpvaW4oXCJcIikpO1xuICByZXR1cm4gJyc7XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXHNob3dcIiwgY29udGV4dCA9PiB7XG4gIHZhciB0b2sgPSBjb250ZXh0LnBvcFRva2VuKCk7XG4gIHZhciBuYW1lID0gdG9rLnRleHQ7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cbiAgY29uc29sZS5sb2codG9rLCBjb250ZXh0Lm1hY3Jvcy5nZXQobmFtZSksIGZ1bmN0aW9uc1tuYW1lXSwgc3ltYm9scy5tYXRoW25hbWVdLCBzeW1ib2xzLnRleHRbbmFtZV0pO1xuICByZXR1cm4gJyc7XG59KTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gR3JvdXBpbmdcbi8vIFxcbGV0XFxiZ3JvdXA9eyBcXGxldFxcZWdyb3VwPX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcYmdyb3VwXCIsIFwie1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGVncm91cFwiLCBcIn1cIik7IC8vIFN5bWJvbHMgZnJvbSBsYXRleC5sdHg6XG4vLyBcXGRlZn57XFxub2JyZWFrc3BhY2V7fX1cbi8vIFxcZGVmXFxscXtgfVxuLy8gXFxkZWZcXHJxeyd9XG4vLyBcXGRlZiBcXGFhIHtcXHIgYX1cbi8vIFxcZGVmIFxcQUEge1xcciBBfVxuXG5kZWZpbmVNYWNybyhcIn5cIiwgXCJcXFxcbm9icmVha3NwYWNlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbHFcIiwgXCJgXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccnFcIiwgXCInXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYWFcIiwgXCJcXFxcciBhXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQUFcIiwgXCJcXFxcciBBXCIpOyAvLyBDb3B5cmlnaHQgKEMpIGFuZCByZWdpc3RlcmVkIChSKSBzeW1ib2xzLiBVc2UgcmF3IHN5bWJvbCBpbiBNYXRoTUwuXG4vLyBcXERlY2xhcmVUZXh0Q29tbWFuZERlZmF1bHR7XFx0ZXh0Y29weXJpZ2h0fXtcXHRleHRjaXJjbGVke2N9fVxuLy8gXFxEZWNsYXJlVGV4dENvbW1hbmREZWZhdWx0e1xcdGV4dHJlZ2lzdGVyZWR9e1xcdGV4dGNpcmNsZWR7JVxuLy8gICAgICBcXGNoZWNrQG1hdGhmb250c1xcZm9udHNpemVcXHNmQHNpemVcXHpAXFxtYXRoQGZvbnRzZmFsc2VcXHNlbGVjdGZvbnQgUn19XG4vLyBcXERlY2xhcmVSb2J1c3RDb21tYW5ke1xcY29weXJpZ2h0fXslXG4vLyAgICBcXGlmbW1vZGV7XFxuZnNzQHRleHR7XFx0ZXh0Y29weXJpZ2h0fX1cXGVsc2VcXHRleHRjb3B5cmlnaHRcXGZpfVxuXG5kZWZpbmVNYWNybyhcIlxcXFx0ZXh0Y29weXJpZ2h0XCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFx0ZXh0Y2lyY2xlZHtjfX17XFxcXGNoYXJgwql9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29weXJpZ2h0XCIsIFwiXFxcXFRleHRPck1hdGh7XFxcXHRleHRjb3B5cmlnaHR9e1xcXFx0ZXh0e1xcXFx0ZXh0Y29weXJpZ2h0fX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0ZXh0cmVnaXN0ZXJlZFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcdGV4dGNpcmNsZWR7XFxcXHNjcmlwdHNpemUgUn19e1xcXFxjaGFyYMKufVwiKTsgLy8gQ2hhcmFjdGVycyBvbWl0dGVkIGZyb20gVW5pY29kZSByYW5nZSAxRDQwMOKAkzFEN0ZGXG5cbmRlZmluZU1hY3JvKFwiXFx1MjEyQ1wiLCBcIlxcXFxtYXRoc2Nye0J9XCIpOyAvLyBzY3JpcHRcblxuZGVmaW5lTWFjcm8oXCJcXHUyMTMwXCIsIFwiXFxcXG1hdGhzY3J7RX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMzFcIiwgXCJcXFxcbWF0aHNjcntGfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjEwQlwiLCBcIlxcXFxtYXRoc2Nye0h9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTEwXCIsIFwiXFxcXG1hdGhzY3J7SX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMTJcIiwgXCJcXFxcbWF0aHNjcntMfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjEzM1wiLCBcIlxcXFxtYXRoc2Nye019XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTFCXCIsIFwiXFxcXG1hdGhzY3J7Un1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMkRcIiwgXCJcXFxcbWF0aGZyYWt7Q31cIik7IC8vIEZyYWt0dXJcblxuZGVmaW5lTWFjcm8oXCJcXHUyMTBDXCIsIFwiXFxcXG1hdGhmcmFre0h9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTI4XCIsIFwiXFxcXG1hdGhmcmFre1p9XCIpOyAvLyBEZWZpbmUgXFxCYmJrIHdpdGggYSBtYWNybyB0aGF0IHdvcmtzIGluIGJvdGggSFRNTCBhbmQgTWF0aE1MLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxCYmJrXCIsIFwiXFxcXEJiYntrfVwiKTsgLy8gVW5pY29kZSBtaWRkbGUgZG90XG4vLyBUaGUgS2FUZVggZm9udHMgZG8gbm90IGNvbnRhaW4gVSswMEI3LiBJbnN0ZWFkLCBcXGNkb3RwIGRpc3BsYXlzXG4vLyB0aGUgZG90IGF0IFUrMjJDNSBhbmQgZ2l2ZXMgaXQgcHVuY3Qgc3BhY2luZy5cblxuZGVmaW5lTWFjcm8oXCJcXHUwMGI3XCIsIFwiXFxcXGNkb3RwXCIpOyAvLyBcXGxsYXAgYW5kIFxccmxhcCByZW5kZXIgdGhlaXIgY29udGVudHMgaW4gdGV4dCBtb2RlXG5cbmRlZmluZU1hY3JvKFwiXFxcXGxsYXBcIiwgXCJcXFxcbWF0aGxsYXB7XFxcXHRleHRybXsjMX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmxhcFwiLCBcIlxcXFxtYXRocmxhcHtcXFxcdGV4dHJteyMxfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxjbGFwXCIsIFwiXFxcXG1hdGhjbGFwe1xcXFx0ZXh0cm17IzF9fVwiKTsgLy8gXFxtYXRoc3RydXQgZnJvbSB0aGUgVGVYYm9vaywgcCAzNjBcblxuZGVmaW5lTWFjcm8oXCJcXFxcbWF0aHN0cnV0XCIsIFwiXFxcXHZwaGFudG9teyh9XCIpOyAvLyBcXHVuZGVyYmFyIGZyb20gVGVYYm9vayBwIDM1M1xuXG5kZWZpbmVNYWNybyhcIlxcXFx1bmRlcmJhclwiLCBcIlxcXFx1bmRlcmxpbmV7XFxcXHRleHR7IzF9fVwiKTsgLy8gXFxub3QgaXMgZGVmaW5lZCBieSBiYXNlL2ZvbnRtYXRoLmx0eCB2aWFcbi8vIFxcRGVjbGFyZU1hdGhTeW1ib2x7XFxub3R9e1xcbWF0aHJlbH17c3ltYm9sc317XCIzNn1cbi8vIEl0J3MgdGh1cyB0cmVhdGVkIGxpa2UgYSBcXG1hdGhyZWwsIGJ1dCBkZWZpbmVkIGJ5IGEgc3ltYm9sIHRoYXQgaGFzIHplcm9cbi8vIHdpZHRoIGJ1dCBleHRlbmRzIHRvIHRoZSByaWdodC4gIFdlIHVzZSBcXHJsYXAgdG8gZ2V0IHRoYXQgc3BhY2luZy5cbi8vIEZvciBNYXRoTUwgd2Ugd3JpdGUgVSswMzM4IGhlcmUuIGJ1aWxkTWF0aE1MLmpzIHdpbGwgdGhlbiBkbyB0aGUgb3ZlcmxheS5cblxuZGVmaW5lTWFjcm8oXCJcXFxcbm90XCIsICdcXFxcaHRtbEBtYXRobWx7XFxcXG1hdGhyZWx7XFxcXG1hdGhybGFwXFxcXEBub3R9fXtcXFxcY2hhclwiMzM4fScpOyAvLyBOZWdhdGVkIHN5bWJvbHMgZnJvbSBiYXNlL2ZvbnRtYXRoLmx0eDpcbi8vIFxcZGVmXFxuZXF7XFxub3Q9fSBcXGxldFxcbmU9XFxuZXFcbi8vIFxcRGVjbGFyZVJvYnVzdENvbW1hbmRcbi8vICAgXFxub3RpbntcXG1hdGhyZWx7XFxtQHRoXFxtYXRocGFsZXR0ZVxcY0BuY2VsXFxpbn19XG4vLyBcXGRlZlxcY0BuY2VsIzEjMntcXG1AdGhcXG9vYWxpZ257JFxcaGZpbCMxXFxta2VybjFtdS9cXGhmaWwkXFxjcmNyJCMxIzIkfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcbmVxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxtYXRocmVse1xcXFxub3Q9fX17XFxcXG1hdGhyZWx7XFxcXGNoYXJg4omgfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuZVwiLCBcIlxcXFxuZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyNjBcIiwgXCJcXFxcbmVxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbm90aW5cIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXG1hdGhyZWx7e1xcXFxpbn1cXFxcbWF0aGxsYXB7L1xcXFxtc2tpcDFtdX19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJg4oiJfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyMDlcIiwgXCJcXFxcbm90aW5cIik7IC8vIFVuaWNvZGUgc3RhY2tlZCByZWxhdGlvbnNcblxuZGVmaW5lTWFjcm8oXCJcXHUyMjU4XCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHs9XFxcXGtlcm57LTFlbX1cXFxccmFpc2Vib3h7MC40ZW19eyRcXFxcc2NyaXB0c2l6ZVxcXFxmcm93biR9fVwiICsgXCJ9e1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNTh9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1OVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcd2VkZ2V9ez19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjU4fX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyNUFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHN0YWNrcmVse1xcXFx0aW55XFxcXHZlZX17PX19e1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNUF9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1QlwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHNjcmlwdHNpemVcXFxcc3Rhcn17PX19XCIgKyBcIntcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjVCfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyNURcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHN0YWNrcmVse1xcXFx0aW55XFxcXG1hdGhybXtkZWZ9fXs9fX1cIiArIFwie1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNUR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1RVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcbWF0aHJte219fXs9fX1cIiArIFwie1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNUV9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1RlwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnk/fXs9fX17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1Rn19XCIpOyAvLyBNaXNjIFVuaWNvZGVcblxuZGVmaW5lTWFjcm8oXCJcXHUyN0MyXCIsIFwiXFxcXHBlcnBcIik7XG5kZWZpbmVNYWNybyhcIlxcdTIwM0NcIiwgXCJcXFxcbWF0aGNsb3NleyFcXFxcbWtlcm4tMC44bXUhfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjIwQ1wiLCBcIlxcXFxub3RuaVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjMxQ1wiLCBcIlxcXFx1bGNvcm5lclwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjMxRFwiLCBcIlxcXFx1cmNvcm5lclwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjMxRVwiLCBcIlxcXFxsbGNvcm5lclwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjMxRlwiLCBcIlxcXFxscmNvcm5lclwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MDBBOVwiLCBcIlxcXFxjb3B5cmlnaHRcIik7XG5kZWZpbmVNYWNybyhcIlxcdTAwQUVcIiwgXCJcXFxcdGV4dHJlZ2lzdGVyZWRcIik7XG5kZWZpbmVNYWNybyhcIlxcdUZFMEZcIiwgXCJcXFxcdGV4dHJlZ2lzdGVyZWRcIik7IC8vIFRoZSBLYVRlWCBmb250cyBoYXZlIGNvcm5lcnMgYXQgY29kZXBvaW50cyB0aGF0IGRvbid0IG1hdGNoIFVuaWNvZGUuXG4vLyBGb3IgTWF0aE1MIHB1cnBvc2VzLCB1c2UgdGhlIFVuaWNvZGUgY29kZSBwb2ludC5cblxuZGVmaW5lTWFjcm8oXCJcXFxcdWxjb3JuZXJcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEB1bGNvcm5lcn17XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMzFjfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx1cmNvcm5lclwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHVyY29ybmVyfXtcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIzMWR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxsY29ybmVyXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbGxjb3JuZXJ9e1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjMxZX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbHJjb3JuZXJcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBscmNvcm5lcn17XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMzFmfX1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIExhVGVYXzLOtVxuLy8gXFx2ZG90c3tcXHZib3h7XFxiYXNlbGluZXNraXA0XFxwQCAgXFxsaW5lc2tpcGxpbWl0XFx6QFxuLy8gXFxrZXJuNlxccEBcXGhib3h7Ln1cXGhib3h7Ln1cXGhib3h7Ln19fVxuLy8gV2UnbGwgY2FsbCBcXHZhcnZkb3RzLCB3aGljaCBnZXRzIGEgZ2x5cGggZnJvbSBzeW1ib2xzLmpzLlxuLy8gVGhlIHplcm8td2lkdGggcnVsZSBnZXRzIHVzIGFuIGVxdWl2YWxlbnQgdG8gdGhlIHZlcnRpY2FsIDZwdCBrZXJuLlxuXG5kZWZpbmVNYWNybyhcIlxcXFx2ZG90c1wiLCBcIlxcXFxtYXRob3Jke1xcXFx2YXJ2ZG90c1xcXFxydWxlezBwdH17MTVwdH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMmVlXCIsIFwiXFxcXHZkb3RzXCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBhbXNtYXRoLnN0eVxuLy8gaHR0cDovL21pcnJvcnMuY29uY2VydHBhc3MuY29tL3RleC1hcmNoaXZlL21hY3Jvcy9sYXRleC9yZXF1aXJlZC9hbXNtYXRoL2Ftc21hdGgucGRmXG4vLyBJdGFsaWMgR3JlZWsgY2FwaXRhbCBsZXR0ZXJzLiAgQU1TIGRlZmluZXMgdGhlc2Ugd2l0aCBcXERlY2xhcmVNYXRoU3ltYm9sLFxuLy8gYnV0IHRoZXkgYXJlIGVxdWl2YWxlbnQgdG8gXFxtYXRoaXR7XFxMZXR0ZXJ9LlxuXG5kZWZpbmVNYWNybyhcIlxcXFx2YXJHYW1tYVwiLCBcIlxcXFxtYXRoaXR7XFxcXEdhbW1hfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhckRlbHRhXCIsIFwiXFxcXG1hdGhpdHtcXFxcRGVsdGF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyVGhldGFcIiwgXCJcXFxcbWF0aGl0e1xcXFxUaGV0YX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJMYW1iZGFcIiwgXCJcXFxcbWF0aGl0e1xcXFxMYW1iZGF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyWGlcIiwgXCJcXFxcbWF0aGl0e1xcXFxYaX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJQaVwiLCBcIlxcXFxtYXRoaXR7XFxcXFBpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclNpZ21hXCIsIFwiXFxcXG1hdGhpdHtcXFxcU2lnbWF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyVXBzaWxvblwiLCBcIlxcXFxtYXRoaXR7XFxcXFVwc2lsb259XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyUGhpXCIsIFwiXFxcXG1hdGhpdHtcXFxcUGhpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclBzaVwiLCBcIlxcXFxtYXRoaXR7XFxcXFBzaX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJPbWVnYVwiLCBcIlxcXFxtYXRoaXR7XFxcXE9tZWdhfVwiKTsgLy9cXG5ld2NvbW1hbmR7XFxzdWJzdGFja31bMV17XFxzdWJhcnJheXtjfSMxXFxlbmRzdWJhcnJheX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcc3Vic3RhY2tcIiwgXCJcXFxcYmVnaW57c3ViYXJyYXl9e2N9IzFcXFxcZW5ke3N1YmFycmF5fVwiKTsgLy8gXFxyZW5ld2NvbW1hbmR7XFxjb2xvbn17XFxub2JyZWFrXFxtc2tpcDJtdVxcbWF0aHB1bmN0e31cXG5vbnNjcmlwdFxuLy8gXFxta2Vybi1cXHRoaW5tdXNraXB7On1cXG1za2lwNm11cGx1czFtdVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uXCIsIFwiXFxcXG5vYnJlYWtcXFxcbXNraXAybXVcXFxcbWF0aHB1bmN0e31cIiArIFwiXFxcXG1hdGhjaG9pY2V7XFxcXG1rZXJuLTNtdX17XFxcXG1rZXJuLTNtdX17fXt9ezp9XFxcXG1za2lwNm11XFxcXHJlbGF4XCIpOyAvLyBcXG5ld2NvbW1hbmR7XFxib3hlZH1bMV17XFxmYm94e1xcbUB0aCRcXGRpc3BsYXlzdHlsZSMxJH19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGJveGVkXCIsIFwiXFxcXGZib3h7JFxcXFxkaXNwbGF5c3R5bGV7IzF9JH1cIik7IC8vIFxcZGVmXFxpZmZ7XFxET1RTQlxcO1xcTG9uZ2xlZnRyaWdodGFycm93XFw7fVxuLy8gXFxkZWZcXGltcGxpZXN7XFxET1RTQlxcO1xcTG9uZ3JpZ2h0YXJyb3dcXDt9XG4vLyBcXGRlZlxcaW1wbGllZGJ5e1xcRE9UU0JcXDtcXExvbmdsZWZ0YXJyb3dcXDt9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGlmZlwiLCBcIlxcXFxET1RTQlxcXFw7XFxcXExvbmdsZWZ0cmlnaHRhcnJvd1xcXFw7XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW1wbGllc1wiLCBcIlxcXFxET1RTQlxcXFw7XFxcXExvbmdyaWdodGFycm93XFxcXDtcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpbXBsaWVkYnlcIiwgXCJcXFxcRE9UU0JcXFxcO1xcXFxMb25nbGVmdGFycm93XFxcXDtcIik7IC8vIEFNU01hdGgncyBhdXRvbWF0aWMgXFxkb3RzLCBiYXNlZCBvbiBcXG1kb3RzQEAgbWFjcm8uXG5cbnZhciBkb3RzQnlUb2tlbiA9IHtcbiAgJywnOiAnXFxcXGRvdHNjJyxcbiAgJ1xcXFxub3QnOiAnXFxcXGRvdHNiJyxcbiAgLy8gXFxrZXliaW5AIGNoZWNrcyBmb3IgdGhlIGZvbGxvd2luZzpcbiAgJysnOiAnXFxcXGRvdHNiJyxcbiAgJz0nOiAnXFxcXGRvdHNiJyxcbiAgJzwnOiAnXFxcXGRvdHNiJyxcbiAgJz4nOiAnXFxcXGRvdHNiJyxcbiAgJy0nOiAnXFxcXGRvdHNiJyxcbiAgJyonOiAnXFxcXGRvdHNiJyxcbiAgJzonOiAnXFxcXGRvdHNiJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcRE9UU0I6XG4gICdcXFxcRE9UU0InOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxjb3Byb2QnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWd2ZWUnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWd3ZWRnZSc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ3VwbHVzJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnY2FwJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnY3VwJzogJ1xcXFxkb3RzYicsXG4gICdcXFxccHJvZCc6ICdcXFxcZG90c2InLFxuICAnXFxcXHN1bSc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ290aW1lcyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ29wbHVzJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnb2RvdCc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ3NxY3VwJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcQW5kJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcbG9uZ3JpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxMb25ncmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdsZWZ0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxMb25nbGVmdGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcbG9uZ2xlZnRyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcTG9uZ2xlZnRyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcbWFwc3RvJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcbG9uZ21hcHN0byc6ICdcXFxcZG90c2InLFxuICAnXFxcXGhvb2tyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcZG90ZXEnOiAnXFxcXGRvdHNiJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcbWF0aGJpbjpcbiAgJ1xcXFxtYXRoYmluJzogJ1xcXFxkb3RzYicsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXG1hdGhyZWw6XG4gICdcXFxcbWF0aHJlbCc6ICdcXFxcZG90c2InLFxuICAnXFxcXHJlbGJhcic6ICdcXFxcZG90c2InLFxuICAnXFxcXFJlbGJhcic6ICdcXFxcZG90c2InLFxuICAnXFxcXHhyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxceGxlZnRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAvLyBTeW1ib2xzIHdob3NlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggXFxET1RTSTpcbiAgJ1xcXFxET1RTSSc6ICdcXFxcZG90c2knLFxuICAnXFxcXGludCc6ICdcXFxcZG90c2knLFxuICAnXFxcXG9pbnQnOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxpaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWlpbnQnOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxpaWlpbnQnOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxpZG90c2ludCc6ICdcXFxcZG90c2knLFxuICAvLyBTeW1ib2xzIHdob3NlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggXFxET1RTWDpcbiAgJ1xcXFxET1RTWCc6ICdcXFxcZG90c3gnXG59O1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c1wiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICAvLyBUT0RPOiBJZiB1c2VkIGluIHRleHQgbW9kZSwgc2hvdWxkIGV4cGFuZCB0byBcXHRleHRlbGxpcHNpcy5cbiAgLy8gSG93ZXZlciwgaW4gS2FUZVgsIFxcdGV4dGVsbGlwc2lzIGFuZCBcXGxkb3RzIGJlaGF2ZSB0aGUgc2FtZVxuICAvLyAoaW4gdGV4dCBtb2RlKSwgYW5kIGl0J3MgdW5saWtlbHkgd2UnZCBzZWUgYW55IG9mIHRoZSBtYXRoIGNvbW1hbmRzXG4gIC8vIHRoYXQgYWZmZWN0IHRoZSBiZWhhdmlvciBvZiBcXGRvdHMgd2hlbiBpbiB0ZXh0IG1vZGUuICBTbyBmaW5lIGZvciBub3dcbiAgLy8gKHVudGlsIHdlIHN1cHBvcnQgXFxpZm1tb2RlIC4uLiBcXGVsc2UgLi4uIFxcZmkpLlxuICB2YXIgdGhlZG90cyA9ICdcXFxcZG90c28nO1xuICB2YXIgbmV4dCA9IGNvbnRleHQuZXhwYW5kQWZ0ZXJGdXR1cmUoKS50ZXh0O1xuXG4gIGlmIChuZXh0IGluIGRvdHNCeVRva2VuKSB7XG4gICAgdGhlZG90cyA9IGRvdHNCeVRva2VuW25leHRdO1xuICB9IGVsc2UgaWYgKG5leHQuc2xpY2UoMCwgNCkgPT09ICdcXFxcbm90Jykge1xuICAgIHRoZWRvdHMgPSAnXFxcXGRvdHNiJztcbiAgfSBlbHNlIGlmIChuZXh0IGluIHN5bWJvbHMubWF0aCkge1xuICAgIGlmICh1dGlscy5jb250YWlucyhbJ2JpbicsICdyZWwnXSwgc3ltYm9scy5tYXRoW25leHRdLmdyb3VwKSkge1xuICAgICAgdGhlZG90cyA9ICdcXFxcZG90c2InO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGVkb3RzO1xufSk7XG52YXIgc3BhY2VBZnRlckRvdHMgPSB7XG4gIC8vIFxccmlnaHRkZWxpbUAgY2hlY2tzIGZvciB0aGUgZm9sbG93aW5nOlxuICAnKSc6IHRydWUsXG4gICddJzogdHJ1ZSxcbiAgJ1xcXFxyYnJhY2snOiB0cnVlLFxuICAnXFxcXH0nOiB0cnVlLFxuICAnXFxcXHJicmFjZSc6IHRydWUsXG4gICdcXFxccmFuZ2xlJzogdHJ1ZSxcbiAgJ1xcXFxyY2VpbCc6IHRydWUsXG4gICdcXFxccmZsb29yJzogdHJ1ZSxcbiAgJ1xcXFxyZ3JvdXAnOiB0cnVlLFxuICAnXFxcXHJtb3VzdGFjaGUnOiB0cnVlLFxuICAnXFxcXHJpZ2h0JzogdHJ1ZSxcbiAgJ1xcXFxiaWdyJzogdHJ1ZSxcbiAgJ1xcXFxiaWdncic6IHRydWUsXG4gICdcXFxcQmlncic6IHRydWUsXG4gICdcXFxcQmlnZ3InOiB0cnVlLFxuICAvLyBcXGV4dHJhQCBhbHNvIHRlc3RzIGZvciB0aGUgZm9sbG93aW5nOlxuICAnJCc6IHRydWUsXG4gIC8vIFxcZXh0cmFwQCBjaGVja3MgZm9yIHRoZSBmb2xsb3dpbmc6XG4gICc7JzogdHJ1ZSxcbiAgJy4nOiB0cnVlLFxuICAnLCc6IHRydWVcbn07XG5kZWZpbmVNYWNybyhcIlxcXFxkb3Rzb1wiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgbmV4dCA9IGNvbnRleHQuZnV0dXJlKCkudGV4dDtcblxuICBpZiAobmV4dCBpbiBzcGFjZUFmdGVyRG90cykge1xuICAgIHJldHVybiBcIlxcXFxsZG90c1xcXFwsXCI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiXFxcXGxkb3RzXCI7XG4gIH1cbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c2NcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIG5leHQgPSBjb250ZXh0LmZ1dHVyZSgpLnRleHQ7IC8vIFxcZG90c2MgdXNlcyBcXGV4dHJhQCBidXQgbm90IFxcZXh0cmFwQCwgaW5zdGVhZCBzcGVjaWFsbHkgY2hlY2tpbmcgZm9yXG4gIC8vICc7JyBhbmQgJy4nLCBidXQgZG9lc24ndCBjaGVjayBmb3IgJywnLlxuXG4gIGlmIChuZXh0IGluIHNwYWNlQWZ0ZXJEb3RzICYmIG5leHQgIT09ICcsJykge1xuICAgIHJldHVybiBcIlxcXFxsZG90c1xcXFwsXCI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiXFxcXGxkb3RzXCI7XG4gIH1cbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcY2RvdHNcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIG5leHQgPSBjb250ZXh0LmZ1dHVyZSgpLnRleHQ7XG5cbiAgaWYgKG5leHQgaW4gc3BhY2VBZnRlckRvdHMpIHtcbiAgICByZXR1cm4gXCJcXFxcQGNkb3RzXFxcXCxcIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJcXFxcQGNkb3RzXCI7XG4gIH1cbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c2JcIiwgXCJcXFxcY2RvdHNcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzbVwiLCBcIlxcXFxjZG90c1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNpXCIsIFwiXFxcXCFcXFxcY2RvdHNcIik7IC8vIGFtc21hdGggZG9lc24ndCBhY3R1YWxseSBkZWZpbmUgXFxkb3RzeCwgYnV0IFxcZG90cyBmb2xsb3dlZCBieSBhIG1hY3JvXG4vLyBzdGFydGluZyB3aXRoIFxcRE9UU1ggaW1wbGllcyBcXGRvdHNvLCBhbmQgdGhlbiBcXGV4dHJhQCBkZXRlY3RzIHRoaXMgY2FzZVxuLy8gYW5kIGZvcmNlcyB0aGUgYWRkZWQgYFxcLGAuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGRvdHN4XCIsIFwiXFxcXGxkb3RzXFxcXCxcIik7IC8vIFxcbGV0XFxET1RTSVxccmVsYXhcbi8vIFxcbGV0XFxET1RTQlxccmVsYXhcbi8vIFxcbGV0XFxET1RTWFxccmVsYXhcblxuZGVmaW5lTWFjcm8oXCJcXFxcRE9UU0lcIiwgXCJcXFxccmVsYXhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxET1RTQlwiLCBcIlxcXFxyZWxheFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXERPVFNYXCIsIFwiXFxcXHJlbGF4XCIpOyAvLyBTcGFjaW5nLCBiYXNlZCBvbiBhbXNtYXRoLnN0eSdzIG92ZXJyaWRlIG9mIExhVGVYIGRlZmF1bHRzXG4vLyBcXERlY2xhcmVSb2J1c3RDb21tYW5ke1xcdG1zcGFjZX1bM117JVxuLy8gICBcXGlmbW1vZGVcXG1za2lwIzEjMlxcZWxzZVxca2VybiMxIzNcXGZpXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcdG1zcGFjZVwiLCBcIlxcXFxUZXh0T3JNYXRoe1xcXFxrZXJuIzEjM317XFxcXG1za2lwIzEjMn1cXFxccmVsYXhcIik7IC8vIFxccmVuZXdjb21tYW5ke1xcLH17XFx0bXNwYWNlK1xcdGhpbm11c2tpcHsuMTY2N2VtfX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcdGhpbm11c2tpcFxuXG5kZWZpbmVNYWNybyhcIlxcXFwsXCIsIFwiXFxcXHRtc3BhY2UrezNtdX17LjE2NjdlbX1cIik7IC8vIFxcbGV0XFx0aGluc3BhY2VcXCxcblxuZGVmaW5lTWFjcm8oXCJcXFxcdGhpbnNwYWNlXCIsIFwiXFxcXCxcIik7IC8vIFxcZGVmXFw+e1xcbXNraXBcXG1lZG11c2tpcH1cbi8vIFxccmVuZXdjb21tYW5ke1xcOn17XFx0bXNwYWNlK1xcbWVkbXVza2lwey4yMjIyZW19fVxuLy8gVE9ETzogXFw+IGFuZCBtYXRoIG1vZGUgb2YgXFw6IHNob3VsZCB1c2UgXFxtZWRtdXNraXAgPSA0bXUgcGx1cyAybXUgbWludXMgNG11XG5cbmRlZmluZU1hY3JvKFwiXFxcXD5cIiwgXCJcXFxcbXNraXB7NG11fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXDpcIiwgXCJcXFxcdG1zcGFjZSt7NG11fXsuMjIyMmVtfVwiKTsgLy8gXFxsZXRcXG1lZHNwYWNlXFw6XG5cbmRlZmluZU1hY3JvKFwiXFxcXG1lZHNwYWNlXCIsIFwiXFxcXDpcIik7IC8vIFxccmVuZXdjb21tYW5ke1xcO317XFx0bXNwYWNlK1xcdGhpY2ttdXNraXB7LjI3NzdlbX19XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXHRoaWNrbXVza2lwID0gNW11IHBsdXMgNW11XG5cbmRlZmluZU1hY3JvKFwiXFxcXDtcIiwgXCJcXFxcdG1zcGFjZSt7NW11fXsuMjc3N2VtfVwiKTsgLy8gXFxsZXRcXHRoaWNrc3BhY2VcXDtcblxuZGVmaW5lTWFjcm8oXCJcXFxcdGhpY2tzcGFjZVwiLCBcIlxcXFw7XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXCF9e1xcdG1zcGFjZS1cXHRoaW5tdXNraXB7LjE2NjdlbX19XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXHRoaW5tdXNraXBcblxuZGVmaW5lTWFjcm8oXCJcXFxcIVwiLCBcIlxcXFx0bXNwYWNlLXszbXV9ey4xNjY3ZW19XCIpOyAvLyBcXGxldFxcbmVndGhpbnNwYWNlXFwhXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5lZ3RoaW5zcGFjZVwiLCBcIlxcXFwhXCIpOyAvLyBcXG5ld2NvbW1hbmR7XFxuZWdtZWRzcGFjZX17XFx0bXNwYWNlLVxcbWVkbXVza2lwey4yMjIyZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFxtZWRtdXNraXBcblxuZGVmaW5lTWFjcm8oXCJcXFxcbmVnbWVkc3BhY2VcIiwgXCJcXFxcdG1zcGFjZS17NG11fXsuMjIyMmVtfVwiKTsgLy8gXFxuZXdjb21tYW5ke1xcbmVndGhpY2tzcGFjZX17XFx0bXNwYWNlLVxcdGhpY2ttdXNraXB7LjI3NzdlbX19XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXHRoaWNrbXVza2lwXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5lZ3RoaWNrc3BhY2VcIiwgXCJcXFxcdG1zcGFjZS17NW11fXsuMjc3ZW19XCIpOyAvLyBcXGRlZlxcZW5zcGFjZXtcXGtlcm4uNWVtIH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZW5zcGFjZVwiLCBcIlxcXFxrZXJuLjVlbSBcIik7IC8vIFxcZGVmXFxlbnNraXB7XFxoc2tpcC41ZW1cXHJlbGF4fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxlbnNraXBcIiwgXCJcXFxcaHNraXAuNWVtXFxcXHJlbGF4XCIpOyAvLyBcXGRlZlxccXVhZHtcXGhza2lwMWVtXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxccXVhZFwiLCBcIlxcXFxoc2tpcDFlbVxcXFxyZWxheFwiKTsgLy8gXFxkZWZcXHFxdWFke1xcaHNraXAyZW1cXHJlbGF4fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxxcXVhZFwiLCBcIlxcXFxoc2tpcDJlbVxcXFxyZWxheFwiKTsgLy8gXFx0YWdAaW5AZGlzcGxheSBmb3JtIG9mIFxcdGFnXG5cbmRlZmluZU1hY3JvKFwiXFxcXHRhZ1wiLCBcIlxcXFxAaWZzdGFyXFxcXHRhZ0BsaXRlcmFsXFxcXHRhZ0BwYXJlblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRhZ0BwYXJlblwiLCBcIlxcXFx0YWdAbGl0ZXJhbHsoeyMxfSl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGFnQGxpdGVyYWxcIiwgY29udGV4dCA9PiB7XG4gIGlmIChjb250ZXh0Lm1hY3Jvcy5nZXQoXCJcXFxcZGZAdGFnXCIpKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJNdWx0aXBsZSBcXFxcdGFnXCIpO1xuICB9XG5cbiAgcmV0dXJuIFwiXFxcXGdkZWZcXFxcZGZAdGFne1xcXFx0ZXh0eyMxfX1cIjtcbn0pOyAvLyBcXHJlbmV3Y29tbWFuZHtcXGJtb2R9e1xcbm9uc2NyaXB0XFxtc2tpcC1cXG1lZG11c2tpcFxcbWtlcm41bXVcXG1hdGhiaW5cbi8vICAge1xcb3BlcmF0b3JAZm9udCBtb2R9XFxwZW5hbHR5OTAwXG4vLyAgIFxcbWtlcm41bXVcXG5vbnNjcmlwdFxcbXNraXAtXFxtZWRtdXNraXB9XG4vLyBcXG5ld2NvbW1hbmR7XFxwb2R9WzFde1xcYWxsb3dicmVha1xuLy8gICBcXGlmQGRpc3BsYXlcXG1rZXJuMThtdVxcZWxzZVxcbWtlcm44bXVcXGZpKCMxKX1cbi8vIFxccmVuZXdjb21tYW5ke1xccG1vZH1bMV17XFxwb2R7e1xcb3BlcmF0b3JAZm9udCBtb2R9XFxta2VybjZtdSMxfX1cbi8vIFxcbmV3Y29tbWFuZHtcXG1vZH1bMV17XFxhbGxvd2JyZWFrXFxpZkBkaXNwbGF5XFxta2VybjE4bXVcbi8vICAgXFxlbHNlXFxta2VybjEybXVcXGZpe1xcb3BlcmF0b3JAZm9udCBtb2R9XFwsXFwsIzF9XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXG1lZG11c2tpcCA9IDRtdSBwbHVzIDJtdSBtaW51cyA0bXVcblxuZGVmaW5lTWFjcm8oXCJcXFxcYm1vZFwiLCBcIlxcXFxtYXRoY2hvaWNle1xcXFxtc2tpcDFtdX17XFxcXG1za2lwMW11fXtcXFxcbXNraXA1bXV9e1xcXFxtc2tpcDVtdX1cIiArIFwiXFxcXG1hdGhiaW57XFxcXHJtIG1vZH1cIiArIFwiXFxcXG1hdGhjaG9pY2V7XFxcXG1za2lwMW11fXtcXFxcbXNraXAxbXV9e1xcXFxtc2tpcDVtdX17XFxcXG1za2lwNW11fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHBvZFwiLCBcIlxcXFxhbGxvd2JyZWFrXCIgKyBcIlxcXFxtYXRoY2hvaWNle1xcXFxta2VybjE4bXV9e1xcXFxta2VybjhtdX17XFxcXG1rZXJuOG11fXtcXFxcbWtlcm44bXV9KCMxKVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHBtb2RcIiwgXCJcXFxccG9ke3tcXFxccm0gbW9kfVxcXFxta2VybjZtdSMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1vZFwiLCBcIlxcXFxhbGxvd2JyZWFrXCIgKyBcIlxcXFxtYXRoY2hvaWNle1xcXFxta2VybjE4bXV9e1xcXFxta2VybjEybXV9e1xcXFxta2VybjEybXV9e1xcXFxta2VybjEybXV9XCIgKyBcIntcXFxccm0gbW9kfVxcXFwsXFxcXCwjMVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gTGFUZVggc291cmNlMmVcbi8vIFxcZXhwYW5kYWZ0ZXJcXGxldFxcZXhwYW5kYWZ0ZXJcXEBub3JtYWxjclxuLy8gICAgIFxcY3NuYW1lXFxleHBhbmRhZnRlclxcQGdvYmJsZVxcc3RyaW5nXFxcXCBcXGVuZGNzbmFtZVxuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZFxcbmV3bGluZXtcXEBub3JtYWxjclxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXG5ld2xpbmVcIiwgXCJcXFxcXFxcXFxcXFxyZWxheFwiKTsgLy8gXFxkZWZcXFRlWHtUXFxrZXJuLS4xNjY3ZW1cXGxvd2VyLjVleFxcaGJveHtFfVxca2Vybi0uMTI1ZW1YXFxAfVxuLy8gVE9ETzogRG9lc24ndCBub3JtYWxseSB3b3JrIGluIG1hdGggbW9kZSBiZWNhdXNlIFxcQCBmYWlscy4gIEthVGVYIGRvZXNuJ3Rcbi8vIHN1cHBvcnQgXFxAIHlldCwgc28gdGhhdCdzIG9taXR0ZWQsIGFuZCB3ZSBhZGQgXFx0ZXh0IHNvIHRoYXQgdGhlIHJlc3VsdFxuLy8gZG9lc24ndCBsb29rIGZ1bm55IGluIG1hdGggbW9kZS5cblxuZGVmaW5lTWFjcm8oXCJcXFxcVGVYXCIsIFwiXFxcXHRleHRybXtcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlRcXFxca2Vybi0uMTY2N2VtXFxcXHJhaXNlYm94ey0uNWV4fXtFfVxcXFxrZXJuLS4xMjVlbVhcIiArIFwifXtUZVh9fVwiKTsgLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXExhVGVYfXtMXFxrZXJuLS4zNmVtJVxuLy8gICAgICAgICB7XFxzYm94XFx6QCBUJVxuLy8gICAgICAgICAgXFx2Ym94IHRvXFxodFxcekB7XFxoYm94e1xcY2hlY2tAbWF0aGZvbnRzXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXGZvbnRzaXplXFxzZkBzaXplXFx6QFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxtYXRoQGZvbnRzZmFsc2VcXHNlbGVjdGZvbnRcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF9JVxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgXFx2c3N9JVxuLy8gICAgICAgICB9JVxuLy8gICAgICAgICBcXGtlcm4tLjE1ZW0lXG4vLyAgICAgICAgIFxcVGVYfVxuLy8gVGhpcyBjb2RlIGFsaWducyB0aGUgdG9wIG9mIHRoZSBBIHdpdGggdGhlIFQgKGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIFRlWCdzXG4vLyBib3hlcywgdGhvdWdoIHZpc3VhbGx5IHRoZSBBIGFwcGVhcnMgdG8gZXh0ZW5kIGFib3ZlIHNsaWdodGx5KS5cbi8vIFdlIGNvbXB1dGUgdGhlIGNvcnJlc3BvbmRpbmcgXFxyYWlzZWJveCB3aGVuIEEgaXMgcmVuZGVyZWQgaW4gXFxub3JtYWxzaXplXG4vLyBcXHNjcmlwdHN0eWxlLCB3aGljaCBoYXMgYSBzY2FsZSBmYWN0b3Igb2YgMC43IChzZWUgT3B0aW9ucy5qcykuXG5cbnZhciBsYXRleFJhaXNlQSA9IG1ha2VFbShmb250TWV0cmljc0RhdGFbJ01haW4tUmVndWxhciddW1wiVFwiLmNoYXJDb2RlQXQoMCldWzFdIC0gMC43ICogZm9udE1ldHJpY3NEYXRhWydNYWluLVJlZ3VsYXInXVtcIkFcIi5jaGFyQ29kZUF0KDApXVsxXSk7XG5kZWZpbmVNYWNybyhcIlxcXFxMYVRlWFwiLCBcIlxcXFx0ZXh0cm17XFxcXGh0bWxAbWF0aG1se1wiICsgKFwiTFxcXFxrZXJuLS4zNmVtXFxcXHJhaXNlYm94e1wiICsgbGF0ZXhSYWlzZUEgKyBcIn17XFxcXHNjcmlwdHN0eWxlIEF9XCIpICsgXCJcXFxca2Vybi0uMTVlbVxcXFxUZVh9e0xhVGVYfX1cIik7IC8vIE5ldyBLYVRlWCBsb2dvIGJhc2VkIG9uIHR3ZWFraW5nIExhVGVYIGxvZ29cblxuZGVmaW5lTWFjcm8oXCJcXFxcS2FUZVhcIiwgXCJcXFxcdGV4dHJte1xcXFxodG1sQG1hdGhtbHtcIiArIChcIktcXFxca2Vybi0uMTdlbVxcXFxyYWlzZWJveHtcIiArIGxhdGV4UmFpc2VBICsgXCJ9e1xcXFxzY3JpcHRzdHlsZSBBfVwiKSArIFwiXFxcXGtlcm4tLjE1ZW1cXFxcVGVYfXtLYVRlWH19XCIpOyAvLyBcXERlY2xhcmVSb2J1c3RDb21tYW5kXFxoc3BhY2V7XFxAaWZzdGFyXFxAaHNwYWNlclxcQGhzcGFjZX1cbi8vIFxcZGVmXFxAaHNwYWNlIzF7XFxoc2tpcCAgIzFcXHJlbGF4fVxuLy8gXFxkZWZcXEBoc3BhY2VyIzF7XFx2cnVsZSBcXEB3aWR0aFxcekBcXG5vYnJlYWtcbi8vICAgICAgICAgICAgICAgICBcXGhza2lwICMxXFxoc2tpcCBcXHpAc2tpcH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcaHNwYWNlXCIsIFwiXFxcXEBpZnN0YXJcXFxcQGhzcGFjZXJcXFxcQGhzcGFjZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEBoc3BhY2VcIiwgXCJcXFxcaHNraXAgIzFcXFxccmVsYXhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxAaHNwYWNlclwiLCBcIlxcXFxydWxlezBwdH17MHB0fVxcXFxoc2tpcCAjMVxcXFxyZWxheFwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbWF0aHRvb2xzLnN0eVxuLy9cXHByb3ZpZGVjb21tYW5kXFxvcmRpbmFyeWNvbG9uezp9XG5cbmRlZmluZU1hY3JvKFwiXFxcXG9yZGluYXJ5Y29sb25cIiwgXCI6XCIpOyAvL1xcZGVmXFx2Y2VudGNvbG9ue1xcbWF0aHJlbHtcXG1hdGhvcFxcb3JkaW5hcnljb2xvbn19XG4vL1RPRE8oZWRlbWFpbmUpOiBOb3QgeWV0IGNlbnRlcmVkLiBGaXggdmlhIFxccmFpc2Vib3ggb3IgIzcyNlxuXG5kZWZpbmVNYWNybyhcIlxcXFx2Y2VudGNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXG1hdGhvcFxcXFxvcmRpbmFyeWNvbG9ufVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGRibGNvbG9ue1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLS45bXV9XFx2Y2VudGNvbG9ufVxuXG5kZWZpbmVNYWNybyhcIlxcXFxkYmxjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tLjltdX1cXFxcdmNlbnRjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMzd9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uZXFxe1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fT19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcdmNlbnRjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX09fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjI1NH19XCIpOyAvLyDiiZRcbi8vIFxccHJvdmlkZWNvbW1hbmQqXFxDb2xvbmVxcXtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9PX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxkYmxjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX09fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjNkfX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxjb2xvbmVxe1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXG1hdGhyZWx7LX19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzYVxcXFxjaGFyXFxcIjIyMTJ9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uZXF7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxtYXRocmVsey19fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjIyMTJ9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGVxcWNvbG9uez1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXGVxcWNvbG9uXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHs9XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFx2Y2VudGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjI1NX19XCIpOyAvLyDiiZVcbi8vIFxccHJvdmlkZWNvbW1hbmQqXFxFcXFjb2xvbns9XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcRXFxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVsez1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiM2RcXFxcY2hhclxcXCIyMjM3fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxlcWNvbG9ue1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZXFjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXG1hdGhyZWx7LX1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM5fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxFcWNvbG9ue1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXEVxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxtYXRocmVsey19XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxkYmxjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMTJcXFxcY2hhclxcXCIyMjM3fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxjb2xvbmFwcHJveHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25hcHByb3hcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFx2Y2VudGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxhcHByb3h9fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzYVxcXFxjaGFyXFxcIjIyNDh9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uYXBwcm94e1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25hcHByb3hcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxkYmxjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcYXBwcm94fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjIyNDh9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uc2lte1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbnNpbVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHNpbX19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjNhXFxcXGNoYXJcXFwiMjIzY319XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcQ29sb25zaW17XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxDb2xvbnNpbVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxzaW19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM3XFxcXGNoYXJcXFwiMjIzY319XCIpOyAvLyBTb21lIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBtYWNyb3MgdG8gbWF0aHRvb2xzIGZ1bmN0aW9ucy5cblxuZGVmaW5lTWFjcm8oXCJcXHUyMjM3XCIsIFwiXFxcXGRibGNvbG9uXCIpOyAvLyA6OlxuXG5kZWZpbmVNYWNybyhcIlxcdTIyMzlcIiwgXCJcXFxcZXFjb2xvblwiKTsgLy8gLTpcblxuZGVmaW5lTWFjcm8oXCJcXHUyMjU0XCIsIFwiXFxcXGNvbG9uZXFxXCIpOyAvLyA6PVxuXG5kZWZpbmVNYWNybyhcIlxcdTIyNTVcIiwgXCJcXFxcZXFxY29sb25cIik7IC8vID06XG5cbmRlZmluZU1hY3JvKFwiXFx1MkE3NFwiLCBcIlxcXFxDb2xvbmVxcVwiKTsgLy8gOjo9XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBjb2xvbmVxdWFscy5zdHlcbi8vIEFsdGVybmF0ZSBuYW1lcyBmb3IgbWF0aHRvb2xzJ3MgbWFjcm9zOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxyYXRpb1wiLCBcIlxcXFx2Y2VudGNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvblwiLCBcIlxcXFxkYmxjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uZXF1YWxzXCIsIFwiXFxcXGNvbG9uZXFxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvbmVxdWFsc1wiLCBcIlxcXFxDb2xvbmVxcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGVxdWFsc2NvbG9uXCIsIFwiXFxcXGVxcWNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZXF1YWxzY29sb25jb2xvblwiLCBcIlxcXFxFcXFjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9ubWludXNcIiwgXCJcXFxcY29sb25lcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25taW51c1wiLCBcIlxcXFxDb2xvbmVxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludXNjb2xvblwiLCBcIlxcXFxlcWNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludXNjb2xvbmNvbG9uXCIsIFwiXFxcXEVxY29sb25cIik7IC8vIFxcY29sb25hcHByb3ggbmFtZSBpcyBzYW1lIGluIG1hdGh0b29scyBhbmQgY29sb25lcXVhbHMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25hcHByb3hcIiwgXCJcXFxcQ29sb25hcHByb3hcIik7IC8vIFxcY29sb25zaW0gbmFtZSBpcyBzYW1lIGluIG1hdGh0b29scyBhbmQgY29sb25lcXVhbHMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25zaW1cIiwgXCJcXFxcQ29sb25zaW1cIik7IC8vIEFkZGl0aW9uYWwgbWFjcm9zLCBpbXBsZW1lbnRlZCBieSBhbmFsb2d5IHdpdGggbWF0aHRvb2xzIGRlZmluaXRpb25zOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxzaW1jb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxzaW1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2ltY29sb25jb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxzaW1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFwcHJveGNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXGFwcHJveFxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcdmNlbnRjb2xvbn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxhcHByb3hjb2xvbmNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXGFwcHJveFxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcZGJsY29sb259XCIpOyAvLyBQcmVzZW50IGluIG5ld3R4bWF0aCwgcHhmb250cyBhbmQgdHhmb250c1xuXG5kZWZpbmVNYWNybyhcIlxcXFxub3RuaVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcbm90XFxcXG5pfXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjBDfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsaW1zdXBcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntsaW1cXFxcLHN1cH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsaW1pbmZcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntsaW1cXFxcLGluZn1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEZyb20gYW1zb3BuLnN0eVxuXG5kZWZpbmVNYWNybyhcIlxcXFxpbmpsaW1cIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntpbmpcXFxcLGxpbX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwcm9qbGltXCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7cHJvalxcXFwsbGltfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcmxpbXN1cFwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe1xcXFxvdmVybGluZXtsaW19fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcmxpbWluZlwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe1xcXFx1bmRlcmxpbmV7bGltfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJpbmpsaW1cIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntcXFxcdW5kZXJyaWdodGFycm93e2xpbX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFycHJvamxpbVwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe1xcXFx1bmRlcmxlZnRhcnJvd3tsaW19fVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gTWF0aE1MIGFsdGVybmF0ZXMgZm9yIEthVGVYIGdseXBocyBpbiB0aGUgVW5pY29kZSBwcml2YXRlIGFyZWFcblxuZGVmaW5lTWFjcm8oXCJcXFxcZ3ZlcnRuZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAZ3ZlcnRuZXFxfXtcXHUyMjY5fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGx2ZXJ0bmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQGx2ZXJ0bmVxcX17XFx1MjI2OH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuZ2VxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5nZXFxfXtcXHUyMjcxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5nZXFzbGFudFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5nZXFzbGFudH17XFx1MjI3MX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxubGVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5sZXFxfXtcXHUyMjcwfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5sZXFzbGFudFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5sZXFzbGFudH17XFx1MjI3MH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuc2hvcnRtaWRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc2hvcnRtaWR9e+KIpH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuc2hvcnRwYXJhbGxlbFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5zaG9ydHBhcmFsbGVsfXviiKZ9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbnN1YnNldGVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5zdWJzZXRlcXF9e1xcdTIyODh9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbnN1cHNldGVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5zdXBzZXRlcXF9e1xcdTIyODl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyc3Vic2V0bmVxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAdmFyc3Vic2V0bmVxfXviiop9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyc3Vic2V0bmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHZhcnN1YnNldG5lcXF9e+Kri31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJzdXBzZXRuZXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEB2YXJzdXBzZXRuZXF9e+KKi31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJzdXBzZXRuZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAdmFyc3Vwc2V0bmVxcX174quMfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGltYXRoXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAaW1hdGh9e1xcdTAxMzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcam1hdGhcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBqbWF0aH17XFx1MDIzN31cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHN0bWFyeXJkIGFuZCBzZW1hbnRpY1xuLy8gVGhlIHN0bWFyeXJkIGFuZCBzZW1hbnRpYyBwYWNrYWdlcyByZW5kZXIgdGhlIG5leHQgZm91ciBpdGVtcyBieSBjYWxsaW5nIGFcbi8vIGdseXBoLiBUaG9zZSBnbHlwaHMgZG8gbm90IGV4aXN0IGluIHRoZSBLYVRlWCBmb250cy4gSGVuY2UgdGhlIG1hY3Jvcy5cblxuZGVmaW5lTWFjcm8oXCJcXFxcbGxicmFja2V0XCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aG9wZW57W1xcXFxta2Vybi0zLjJtdVt9fVwiICsgXCJ7XFxcXG1hdGhvcGVue1xcXFxjaGFyYFxcdTI3ZTZ9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJyYnJhY2tldFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhjbG9zZXtdXFxcXG1rZXJuLTMuMm11XX19XCIgKyBcIntcXFxcbWF0aGNsb3Nle1xcXFxjaGFyYFxcdTI3ZTd9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjdlNlwiLCBcIlxcXFxsbGJyYWNrZXRcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCBbXG5cbmRlZmluZU1hY3JvKFwiXFx1MjdlN1wiLCBcIlxcXFxycmJyYWNrZXRcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCBdXG5cbmRlZmluZU1hY3JvKFwiXFxcXGxCcmFjZVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhvcGVue1xcXFx7XFxcXG1rZXJuLTMuMm11W319XCIgKyBcIntcXFxcbWF0aG9wZW57XFxcXGNoYXJgXFx1Mjk4M319XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcckJyYWNlXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aGNsb3Nle11cXFxcbWtlcm4tMy4ybXVcXFxcfX19XCIgKyBcIntcXFxcbWF0aGNsb3Nle1xcXFxjaGFyYFxcdTI5ODR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1Mjk4M1wiLCBcIlxcXFxsQnJhY2VcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCB7XG5cbmRlZmluZU1hY3JvKFwiXFx1Mjk4NFwiLCBcIlxcXFxyQnJhY2VcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCB9XG4vLyBUT0RPOiBDcmVhdGUgdmFyaWFibGUgc2l6ZWQgdmVyc2lvbnMgb2YgdGhlIGxhc3QgdHdvIGl0ZW1zLiBJIGJlbGlldmUgdGhhdFxuLy8gd2lsbCByZXF1aXJlIG5ldyBmb250IGdseXBocy5cbi8vIFRoZSBzdG1hcnlyZCBmdW5jdGlvbiBgXFxtaW51c29gIHByb3ZpZGVzIGEgXCJQbGltc29sbFwiIHN5bWJvbCB0aGF0XG4vLyBzdXBlcmltcG9zZXMgdGhlIGNoYXJhY3RlcnMgXFxjaXJjIGFuZCBcXG1hdGhtaW51cy4gVXNlZCBpbiBjaGVtaXN0cnkuXG5cbmRlZmluZU1hY3JvKFwiXFxcXG1pbnVzb1wiLCBcIlxcXFxtYXRoYmlue1xcXFxodG1sQG1hdGhtbHtcIiArIFwie1xcXFxtYXRocmxhcHtcXFxcbWF0aGNob2ljZXtcXFxca2VybnswLjE0NWVtfX17XFxcXGtlcm57MC4xNDVlbX19XCIgKyBcIntcXFxca2VybnswLjEwMTVlbX19e1xcXFxrZXJuezAuMDcyNWVtfX1cXFxcY2lyY317LX19fVwiICsgXCJ7XFxcXGNoYXJg4qa1fX1cIik7XG5kZWZpbmVNYWNybyhcIuKmtVwiLCBcIlxcXFxtaW51c29cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHRleHZjLnN0eVxuLy8gVGhlIHRleHZjIHBhY2thZ2UgY29udGFpbnMgbWFjcm9zIGF2YWlsYWJsZSBpbiBtZWRpYXdpa2kgcGFnZXMuXG4vLyBXZSBvbWl0IHRoZSBmdW5jdGlvbnMgZGVwcmVjYXRlZCBhdFxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGVscDpEaXNwbGF5aW5nX2FfZm9ybXVsYSNEZXByZWNhdGVkX3N5bnRheFxuLy8gV2UgYWxzbyBvbWl0IHRleHZjJ3MgXFxPLCB3aGljaCBjb25mbGljdHMgd2l0aCBcXHRleHR7XFxPfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxkYXJyXCIsIFwiXFxcXGRvd25hcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRBcnJcIiwgXCJcXFxcRG93bmFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRGFyclwiLCBcIlxcXFxEb3duYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsYW5nXCIsIFwiXFxcXGxhbmdsZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJhbmdcIiwgXCJcXFxccmFuZ2xlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdWFyclwiLCBcIlxcXFx1cGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdUFyclwiLCBcIlxcXFxVcGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcVWFyclwiLCBcIlxcXFxVcGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTlwiLCBcIlxcXFxtYXRoYmJ7Tn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSXCIsIFwiXFxcXG1hdGhiYntSfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFpcIiwgXCJcXFxcbWF0aGJie1p9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYWxlZlwiLCBcIlxcXFxhbGVwaFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFsZWZzeW1cIiwgXCJcXFxcYWxlcGhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxBbHBoYVwiLCBcIlxcXFxtYXRocm17QX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxCZXRhXCIsIFwiXFxcXG1hdGhybXtCfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJ1bGxcIiwgXCJcXFxcYnVsbGV0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQ2hpXCIsIFwiXFxcXG1hdGhybXtYfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNsdWJzXCIsIFwiXFxcXGNsdWJzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY251bXNcIiwgXCJcXFxcbWF0aGJie0N9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQ29tcGxleFwiLCBcIlxcXFxtYXRoYmJ7Q31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxEYWdnZXJcIiwgXCJcXFxcZGRhZ2dlclwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRpYW1vbmRzXCIsIFwiXFxcXGRpYW1vbmRzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZW1wdHlcIiwgXCJcXFxcZW1wdHlzZXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxFcHNpbG9uXCIsIFwiXFxcXG1hdGhybXtFfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEV0YVwiLCBcIlxcXFxtYXRocm17SH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxleGlzdFwiLCBcIlxcXFxleGlzdHNcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxoYXJyXCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaEFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEhhcnJcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxoZWFydHNcIiwgXCJcXFxcaGVhcnRzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW1hZ2VcIiwgXCJcXFxcSW1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpbmZpblwiLCBcIlxcXFxpbmZ0eVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXElvdGFcIiwgXCJcXFxcbWF0aHJte0l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaXNpblwiLCBcIlxcXFxpblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEthcHBhXCIsIFwiXFxcXG1hdGhybXtLfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxhcnJcIiwgXCJcXFxcbGVmdGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbEFyclwiLCBcIlxcXFxMZWZ0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxMYXJyXCIsIFwiXFxcXExlZnRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxyYXJyXCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbHJBcnJcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxMcmFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXE11XCIsIFwiXFxcXG1hdGhybXtNfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5hdG51bXNcIiwgXCJcXFxcbWF0aGJie059XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTnVcIiwgXCJcXFxcbWF0aHJte059XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcT21pY3JvblwiLCBcIlxcXFxtYXRocm17T31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwbHVzbW5cIiwgXCJcXFxccG1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyYXJyXCIsIFwiXFxcXHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyQXJyXCIsIFwiXFxcXFJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSYXJyXCIsIFwiXFxcXFJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWFsXCIsIFwiXFxcXFJlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVhbHNcIiwgXCJcXFxcbWF0aGJie1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcUmVhbHNcIiwgXCJcXFxcbWF0aGJie1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcUmhvXCIsIFwiXFxcXG1hdGhybXtQfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNkb3RcIiwgXCJcXFxcY2RvdFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNlY3RcIiwgXCJcXFxcU1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNwYWRlc1wiLCBcIlxcXFxzcGFkZXN1aXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxzdWJcIiwgXCJcXFxcc3Vic2V0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc3ViZVwiLCBcIlxcXFxzdWJzZXRlcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHN1cGVcIiwgXCJcXFxcc3Vwc2V0ZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxUYXVcIiwgXCJcXFxcbWF0aHJte1R9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGhldGFzeW1cIiwgXCJcXFxcdmFydGhldGFcIik7IC8vIFRPRE86IGRlZmluZU1hY3JvKFwiXFxcXHZhcmNvcHBhXCIsIFwiXFxcXFxcbWJveHtcXFxcY29wcGF9XCIpO1xuXG5kZWZpbmVNYWNybyhcIlxcXFx3ZWllcnBcIiwgXCJcXFxcd3BcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxaZXRhXCIsIFwiXFxcXG1hdGhybXtafVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gc3RhdG1hdGguc3R5XG4vLyBodHRwczovL2N0YW4ubWF0aC5pbGxpbm9pcy5lZHUvbWFjcm9zL2xhdGV4L2NvbnRyaWIvc3RhdG1hdGgvc3RhdG1hdGgucGRmXG5cbmRlZmluZU1hY3JvKFwiXFxcXGFyZ21pblwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2FyZ1xcXFwsbWlufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFyZ21heFwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2FyZ1xcXFwsbWF4fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHBsaW1cIiwgXCJcXFxcRE9UU0JcXFxcbWF0aG9we1xcXFxvcGVyYXRvcm5hbWV7cGxpbX19XFxcXGxpbWl0c1wiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gYnJha2V0LnN0eVxuLy8gaHR0cDovL2N0YW4ubWF0aC53YXNoaW5ndG9uLmVkdS90ZXgtYXJjaGl2ZS9tYWNyb3MvbGF0ZXgvY29udHJpYi9icmFrZXQvYnJha2V0LnBkZlxuXG5kZWZpbmVNYWNybyhcIlxcXFxicmFcIiwgXCJcXFxcbWF0aGlubmVye1xcXFxsYW5nbGV7IzF9fH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxrZXRcIiwgXCJcXFxcbWF0aGlubmVye3x7IzF9XFxcXHJhbmdsZX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxicmFrZXRcIiwgXCJcXFxcbWF0aGlubmVye1xcXFxsYW5nbGV7IzF9XFxcXHJhbmdsZX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxCcmFcIiwgXCJcXFxcbGVmdFxcXFxsYW5nbGUjMVxcXFxyaWdodHxcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxLZXRcIiwgXCJcXFxcbGVmdHwjMVxcXFxyaWdodFxcXFxyYW5nbGVcIik7XG5cbnZhciBicmFrZXRIZWxwZXIgPSBvbmUgPT4gY29udGV4dCA9PiB7XG4gIHZhciBsZWZ0ID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuICB2YXIgbWlkZGxlID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuICB2YXIgbWlkZGxlRG91YmxlID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuICB2YXIgcmlnaHQgPSBjb250ZXh0LmNvbnN1bWVBcmcoKS50b2tlbnM7XG4gIHZhciBvbGRNaWRkbGUgPSBjb250ZXh0Lm1hY3Jvcy5nZXQoXCJ8XCIpO1xuICB2YXIgb2xkTWlkZGxlRG91YmxlID0gY29udGV4dC5tYWNyb3MuZ2V0KFwiXFxcXHxcIik7XG4gIGNvbnRleHQubWFjcm9zLmJlZ2luR3JvdXAoKTtcblxuICB2YXIgbWlkTWFjcm8gPSBkb3VibGUgPT4gY29udGV4dCA9PiB7XG4gICAgaWYgKG9uZSkge1xuICAgICAgLy8gT25seSBtb2RpZnkgdGhlIGZpcnN0IGluc3RhbmNlIG9mIHwgb3IgXFx8XG4gICAgICBjb250ZXh0Lm1hY3Jvcy5zZXQoXCJ8XCIsIG9sZE1pZGRsZSk7XG5cbiAgICAgIGlmIChtaWRkbGVEb3VibGUubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRleHQubWFjcm9zLnNldChcIlxcXFx8XCIsIG9sZE1pZGRsZURvdWJsZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRvdWJsZWQgPSBkb3VibGU7XG5cbiAgICBpZiAoIWRvdWJsZSAmJiBtaWRkbGVEb3VibGUubGVuZ3RoKSB7XG4gICAgICAvLyBNaW1pYyBcXEBpZm5leHRjaGFyXG4gICAgICB2YXIgbmV4dFRva2VuID0gY29udGV4dC5mdXR1cmUoKTtcblxuICAgICAgaWYgKG5leHRUb2tlbi50ZXh0ID09PSBcInxcIikge1xuICAgICAgICBjb250ZXh0LnBvcFRva2VuKCk7XG4gICAgICAgIGRvdWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGRvdWJsZWQgPyBtaWRkbGVEb3VibGUgOiBtaWRkbGUsXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfTtcblxuICBjb250ZXh0Lm1hY3Jvcy5zZXQoXCJ8XCIsIG1pZE1hY3JvKGZhbHNlKSk7XG5cbiAgaWYgKG1pZGRsZURvdWJsZS5sZW5ndGgpIHtcbiAgICBjb250ZXh0Lm1hY3Jvcy5zZXQoXCJcXFxcfFwiLCBtaWRNYWNybyh0cnVlKSk7XG4gIH1cblxuICB2YXIgYXJnID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuICB2YXIgZXhwYW5kZWQgPSBjb250ZXh0LmV4cGFuZFRva2VucyhbLi4ucmlnaHQsIC4uLmFyZywgLi4ubGVmdCAvLyByZXZlcnNlZFxuICBdKTtcbiAgY29udGV4dC5tYWNyb3MuZW5kR3JvdXAoKTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbnM6IGV4cGFuZGVkLnJldmVyc2UoKSxcbiAgICBudW1BcmdzOiAwXG4gIH07XG59O1xuXG5kZWZpbmVNYWNybyhcIlxcXFxicmFAa2V0XCIsIGJyYWtldEhlbHBlcihmYWxzZSkpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYnJhQHNldFwiLCBicmFrZXRIZWxwZXIodHJ1ZSkpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQnJha2V0XCIsIFwiXFxcXGJyYUBrZXR7XFxcXGxlZnRcXFxcbGFuZ2xlfVwiICsgXCJ7XFxcXCxcXFxcbWlkZGxlXFxcXHZlcnRcXFxcLH17XFxcXCxcXFxcbWlkZGxlXFxcXHZlcnRcXFxcLH17XFxcXHJpZ2h0XFxcXHJhbmdsZX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxTZXRcIiwgXCJcXFxcYnJhQHNldHtcXFxcbGVmdFxcXFx7XFxcXDp9XCIgKyBcIntcXFxcO1xcXFxtaWRkbGVcXFxcdmVydFxcXFw7fXtcXFxcO1xcXFxtaWRkbGVcXFxcVmVydFxcXFw7fXtcXFxcOlxcXFxyaWdodFxcXFx9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNldFwiLCBcIlxcXFxicmFAc2V0e1xcXFx7XFxcXCx9e1xcXFxtaWR9e317XFxcXCxcXFxcfX1cIik7IC8vIGhhcyBubyBzdXBwb3J0IGZvciBzcGVjaWFsIHx8IG9yIFxcfFxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gYWN0dWFyaWFsYW5nbGUuZHR4XG5cbmRlZmluZU1hY3JvKFwiXFxcXGFuZ2xuXCIsIFwie1xcXFxhbmdsIG59XCIpOyAvLyBDdXN0b20gS2hhbiBBY2FkZW15IGNvbG9ycywgc2hvdWxkIGJlIG1vdmVkIHRvIGFuIG9wdGlvbmFsIHBhY2thZ2VcblxuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM2NDk1ZWR9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG9yYW5nZVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZmE1MDB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHBpbmtcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmYwMGFmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWRcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZGYwMDMwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlblwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMyOGFlN2J9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlcIiwgXCJcXFxcdGV4dGNvbG9ye2dyYXl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM5ZDM4YmR9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVBXCIsIFwiXFxcXHRleHRjb2xvcnsjI2NjZmFmZn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZUJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjODBmNmZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyM2M2Q5ZWF9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVEXCIsIFwiXFxcXHRleHRjb2xvcnsjIzExYWNjZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZUVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMGM3Zjk5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0ZWFsQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM5NGZmZjV9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxCXCIsIFwiXFxcXHRleHRjb2xvcnsjIzI2ZWRkNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbENcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMDFkMWMxfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0ZWFsRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwMWE5OTV9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxFXCIsIFwiXFxcXHRleHRjb2xvcnsjIzIwODE3MH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JlZW5BXCIsIFwiXFxcXHRleHRjb2xvcnsjI2I2ZmZiMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JlZW5CXCIsIFwiXFxcXHRleHRjb2xvcnsjIzhhZjI4MX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JlZW5DXCIsIFwiXFxcXHRleHRjb2xvcnsjIzc0Y2Y3MH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JlZW5EXCIsIFwiXFxcXHRleHRjb2xvcnsjIzFmYWI1NH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JlZW5FXCIsIFwiXFxcXHRleHRjb2xvcnsjIzBkOTIzZn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ29sZEFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmZkMGE5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZmJiNzF9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmOWMzOX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ29sZERcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZTA3ZDEwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNhNzVhMDV9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmNhOWE5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWRCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmODQ4Mn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmOTY4NWR9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZERcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZTg0ZDM5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWRFXCIsIFwiXFxcXHRleHRjb2xvcnsjI2JjMjYxMn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZmJkZTB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1hcm9vbkJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY5MmM2fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25DXCIsIFwiXFxcXHRleHRjb2xvcnsjI2VkNWZhNn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNjYTMzN2N9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1hcm9vbkVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjOWUwMzRlfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVBXCIsIFwiXFxcXHRleHRjb2xvcnsjI2RkZDdmZn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNjNmI5ZmN9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZUNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYWE4N2ZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVEXCIsIFwiXFxcXHRleHRjb2xvcnsjIzc4NTRhYn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM1NDNiNzh9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1pbnRBXCIsIFwiXFxcXHRleHRjb2xvcnsjI2Y1ZjllOH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZWRmMmRmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtaW50Q1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlMGU1Y2N9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlBXCIsIFwiXFxcXHRleHRjb2xvcnsjI2Y2ZjdmN317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjBmMWYyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5Q1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlM2U1ZTZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlEXCIsIFwiXFxcXHRleHRjb2xvcnsjI2Q2ZDhkYX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYmFiZWMyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5RlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM4ODhkOTN9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlHXCIsIFwiXFxcXHRleHRjb2xvcnsjIzYyNjU2OX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUhcIiwgXCJcXFxcdGV4dGNvbG9yeyMjM2IzZTQwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5SVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMyMTI0MmN9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGthQmx1ZVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMzMTQ0NTN9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGthR3JlZW5cIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzFCMzA3fXsjMX1cIik7XG5cbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSDigJxndWxsZXTigJ0gd2hlcmUgbWFjcm9zIGFyZSBleHBhbmRlZFxuICogdW50aWwgb25seSBub24tbWFjcm8gdG9rZW5zIHJlbWFpbi5cbiAqL1xuLy8gTGlzdCBvZiBjb21tYW5kcyB0aGF0IGFjdCBsaWtlIG1hY3JvcyBidXQgYXJlbid0IGRlZmluZWQgYXMgYSBtYWNybyxcbi8vIGZ1bmN0aW9uLCBvciBzeW1ib2wuICBVc2VkIGluIGBpc0RlZmluZWRgLlxudmFyIGltcGxpY2l0Q29tbWFuZHMgPSB7XG4gIFwiXlwiOiB0cnVlLFxuICAvLyBQYXJzZXIuanNcbiAgXCJfXCI6IHRydWUsXG4gIC8vIFBhcnNlci5qc1xuICBcIlxcXFxsaW1pdHNcIjogdHJ1ZSxcbiAgLy8gUGFyc2VyLmpzXG4gIFwiXFxcXG5vbGltaXRzXCI6IHRydWUgLy8gUGFyc2VyLmpzXG5cbn07XG5jbGFzcyBNYWNyb0V4cGFuZGVyIHtcbiAgY29uc3RydWN0b3IoaW5wdXQsIHNldHRpbmdzLCBtb2RlKSB7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHZvaWQgMDtcbiAgICB0aGlzLmV4cGFuc2lvbkNvdW50ID0gdm9pZCAwO1xuICAgIHRoaXMubGV4ZXIgPSB2b2lkIDA7XG4gICAgdGhpcy5tYWNyb3MgPSB2b2lkIDA7XG4gICAgdGhpcy5zdGFjayA9IHZvaWQgMDtcbiAgICB0aGlzLm1vZGUgPSB2b2lkIDA7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgIHRoaXMuZXhwYW5zaW9uQ291bnQgPSAwO1xuICAgIHRoaXMuZmVlZChpbnB1dCk7IC8vIE1ha2UgbmV3IGdsb2JhbCBuYW1lc3BhY2VcblxuICAgIHRoaXMubWFjcm9zID0gbmV3IE5hbWVzcGFjZShtYWNyb3MsIHNldHRpbmdzLm1hY3Jvcyk7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICB0aGlzLnN0YWNrID0gW107IC8vIGNvbnRhaW5zIHRva2VucyBpbiBSRVZFUlNFIG9yZGVyXG4gIH1cbiAgLyoqXG4gICAqIEZlZWQgYSBuZXcgaW5wdXQgc3RyaW5nIHRvIHRoZSBzYW1lIE1hY3JvRXhwYW5kZXJcbiAgICogKHdpdGggZXhpc3RpbmcgbWFjcm9zIGV0Yy4pLlxuICAgKi9cblxuXG4gIGZlZWQoaW5wdXQpIHtcbiAgICB0aGlzLmxleGVyID0gbmV3IExleGVyKGlucHV0LCB0aGlzLnNldHRpbmdzKTtcbiAgfVxuICAvKipcbiAgICogU3dpdGNoZXMgYmV0d2VlbiBcInRleHRcIiBhbmQgXCJtYXRoXCIgbW9kZXMuXG4gICAqL1xuXG5cbiAgc3dpdGNoTW9kZShuZXdNb2RlKSB7XG4gICAgdGhpcy5tb2RlID0gbmV3TW9kZTtcbiAgfVxuICAvKipcbiAgICogU3RhcnQgYSBuZXcgZ3JvdXAgbmVzdGluZyB3aXRoaW4gYWxsIG5hbWVzcGFjZXMuXG4gICAqL1xuXG5cbiAgYmVnaW5Hcm91cCgpIHtcbiAgICB0aGlzLm1hY3Jvcy5iZWdpbkdyb3VwKCk7XG4gIH1cbiAgLyoqXG4gICAqIEVuZCBjdXJyZW50IGdyb3VwIG5lc3Rpbmcgd2l0aGluIGFsbCBuYW1lc3BhY2VzLlxuICAgKi9cblxuXG4gIGVuZEdyb3VwKCkge1xuICAgIHRoaXMubWFjcm9zLmVuZEdyb3VwKCk7XG4gIH1cbiAgLyoqXG4gICAqIEVuZHMgYWxsIGN1cnJlbnRseSBuZXN0ZWQgZ3JvdXBzIChpZiBhbnkpLCByZXN0b3JpbmcgdmFsdWVzIGJlZm9yZSB0aGVcbiAgICogZ3JvdXBzIGJlZ2FuLiAgVXNlZnVsIGluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gdGhlIG1pZGRsZSBvZiBwYXJzaW5nLlxuICAgKi9cblxuXG4gIGVuZEdyb3VwcygpIHtcbiAgICB0aGlzLm1hY3Jvcy5lbmRHcm91cHMoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG9wbW9zdCB0b2tlbiBvbiB0aGUgc3RhY2ssIHdpdGhvdXQgZXhwYW5kaW5nIGl0LlxuICAgKiBTaW1pbGFyIGluIGJlaGF2aW9yIHRvIFRlWCdzIGBcXGZ1dHVyZWxldGAuXG4gICAqL1xuXG5cbiAgZnV0dXJlKCkge1xuICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wdXNoVG9rZW4odGhpcy5sZXhlci5sZXgoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGFuZCByZXR1cm4gdGhlIG5leHQgdW5leHBhbmRlZCB0b2tlbi5cbiAgICovXG5cblxuICBwb3BUb2tlbigpIHtcbiAgICB0aGlzLmZ1dHVyZSgpOyAvLyBlbnN1cmUgbm9uLWVtcHR5IHN0YWNrXG5cbiAgICByZXR1cm4gdGhpcy5zdGFjay5wb3AoKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgZ2l2ZW4gdG9rZW4gdG8gdGhlIHRva2VuIHN0YWNrLiAgSW4gcGFydGljdWxhciwgdGhpcyBnZXQgYmUgdXNlZFxuICAgKiB0byBwdXQgYmFjayBhIHRva2VuIHJldHVybmVkIGZyb20gb25lIG9mIHRoZSBvdGhlciBtZXRob2RzLlxuICAgKi9cblxuXG4gIHB1c2hUb2tlbih0b2tlbikge1xuICAgIHRoaXMuc3RhY2sucHVzaCh0b2tlbik7XG4gIH1cbiAgLyoqXG4gICAqIEFwcGVuZCBhbiBhcnJheSBvZiB0b2tlbnMgdG8gdGhlIHRva2VuIHN0YWNrLlxuICAgKi9cblxuXG4gIHB1c2hUb2tlbnModG9rZW5zKSB7XG4gICAgdGhpcy5zdGFjay5wdXNoKC4uLnRva2Vucyk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmQgYW4gbWFjcm8gYXJndW1lbnQgd2l0aG91dCBleHBhbmRpbmcgdG9rZW5zIGFuZCBhcHBlbmQgdGhlIGFycmF5IG9mXG4gICAqIHRva2VucyB0byB0aGUgdG9rZW4gc3RhY2suIFVzZXMgVG9rZW4gYXMgYSBjb250YWluZXIgZm9yIHRoZSByZXN1bHQuXG4gICAqL1xuXG5cbiAgc2NhbkFyZ3VtZW50KGlzT3B0aW9uYWwpIHtcbiAgICB2YXIgc3RhcnQ7XG4gICAgdmFyIGVuZDtcbiAgICB2YXIgdG9rZW5zO1xuXG4gICAgaWYgKGlzT3B0aW9uYWwpIHtcbiAgICAgIHRoaXMuY29uc3VtZVNwYWNlcygpOyAvLyBcXEBpZm5leHRjaGFyIGdvYmJsZXMgYW55IHNwYWNlIGZvbGxvd2luZyBpdFxuXG4gICAgICBpZiAodGhpcy5mdXR1cmUoKS50ZXh0ICE9PSBcIltcIikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgc3RhcnQgPSB0aGlzLnBvcFRva2VuKCk7IC8vIGRvbid0IGluY2x1ZGUgWyBpbiB0b2tlbnNcblxuICAgICAgKHtcbiAgICAgICAgdG9rZW5zLFxuICAgICAgICBlbmRcbiAgICAgIH0gPSB0aGlzLmNvbnN1bWVBcmcoW1wiXVwiXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAoe1xuICAgICAgICB0b2tlbnMsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmRcbiAgICAgIH0gPSB0aGlzLmNvbnN1bWVBcmcoKSk7XG4gICAgfSAvLyBpbmRpY2F0ZSB0aGUgZW5kIG9mIGFuIGFyZ3VtZW50XG5cblxuICAgIHRoaXMucHVzaFRva2VuKG5ldyBUb2tlbihcIkVPRlwiLCBlbmQubG9jKSk7XG4gICAgdGhpcy5wdXNoVG9rZW5zKHRva2Vucyk7XG4gICAgcmV0dXJuIHN0YXJ0LnJhbmdlKGVuZCwgXCJcIik7XG4gIH1cbiAgLyoqXG4gICAqIENvbnN1bWUgYWxsIGZvbGxvd2luZyBzcGFjZSB0b2tlbnMsIHdpdGhvdXQgZXhwYW5zaW9uLlxuICAgKi9cblxuXG4gIGNvbnN1bWVTcGFjZXMoKSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIHRva2VuID0gdGhpcy5mdXR1cmUoKTtcblxuICAgICAgaWYgKHRva2VuLnRleHQgPT09IFwiIFwiKSB7XG4gICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnN1bWUgYW4gYXJndW1lbnQgZnJvbSB0aGUgdG9rZW4gc3RyZWFtLCBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgYXJyYXlcbiAgICogb2YgdG9rZW5zIGFuZCBzdGFydC9lbmQgdG9rZW4uXG4gICAqL1xuXG5cbiAgY29uc3VtZUFyZyhkZWxpbXMpIHtcbiAgICAvLyBUaGUgYXJndW1lbnQgZm9yIGEgZGVsaW1pdGVkIHBhcmFtZXRlciBpcyB0aGUgc2hvcnRlc3QgKHBvc3NpYmx5XG4gICAgLy8gZW1wdHkpIHNlcXVlbmNlIG9mIHRva2VucyB3aXRoIHByb3Blcmx5IG5lc3RlZCB7Li4ufSBncm91cHMgdGhhdCBpc1xuICAgIC8vIGZvbGxvd2VkIC4uLiBieSB0aGlzIHBhcnRpY3VsYXIgbGlzdCBvZiBub24tcGFyYW1ldGVyIHRva2Vucy5cbiAgICAvLyBUaGUgYXJndW1lbnQgZm9yIGFuIHVuZGVsaW1pdGVkIHBhcmFtZXRlciBpcyB0aGUgbmV4dCBub25ibGFua1xuICAgIC8vIHRva2VuLCB1bmxlc3MgdGhhdCB0b2tlbiBpcyDigJh74oCZLCB3aGVuIHRoZSBhcmd1bWVudCB3aWxsIGJlIHRoZVxuICAgIC8vIGVudGlyZSB7Li4ufSBncm91cCB0aGF0IGZvbGxvd3MuXG4gICAgdmFyIHRva2VucyA9IFtdO1xuICAgIHZhciBpc0RlbGltaXRlZCA9IGRlbGltcyAmJiBkZWxpbXMubGVuZ3RoID4gMDtcblxuICAgIGlmICghaXNEZWxpbWl0ZWQpIHtcbiAgICAgIC8vIElnbm9yZSBzcGFjZXMgYmV0d2VlbiBhcmd1bWVudHMuICBBcyB0aGUgVGVYYm9vayBzYXlzOlxuICAgICAgLy8gXCJBZnRlciB5b3UgaGF2ZSBzYWlkIOKAmFxcZGVmXFxyb3cjMSMyey4uLn3igJksIHlvdSBhcmUgYWxsb3dlZCB0b1xuICAgICAgLy8gIHB1dCBzcGFjZXMgYmV0d2VlbiB0aGUgYXJndW1lbnRzIChlLmcuLCDigJhcXHJvdyB4IG7igJkpLCBiZWNhdXNlXG4gICAgICAvLyAgVGVYIGRvZXNu4oCZdCB1c2Ugc2luZ2xlIHNwYWNlcyBhcyB1bmRlbGltaXRlZCBhcmd1bWVudHMuXCJcbiAgICAgIHRoaXMuY29uc3VtZVNwYWNlcygpO1xuICAgIH1cblxuICAgIHZhciBzdGFydCA9IHRoaXMuZnV0dXJlKCk7XG4gICAgdmFyIHRvaztcbiAgICB2YXIgZGVwdGggPSAwO1xuICAgIHZhciBtYXRjaCA9IDA7XG5cbiAgICBkbyB7XG4gICAgICB0b2sgPSB0aGlzLnBvcFRva2VuKCk7XG4gICAgICB0b2tlbnMucHVzaCh0b2spO1xuXG4gICAgICBpZiAodG9rLnRleHQgPT09IFwie1wiKSB7XG4gICAgICAgICsrZGVwdGg7XG4gICAgICB9IGVsc2UgaWYgKHRvay50ZXh0ID09PSBcIn1cIikge1xuICAgICAgICAtLWRlcHRoO1xuXG4gICAgICAgIGlmIChkZXB0aCA9PT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4dHJhIH1cIiwgdG9rKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJFT0ZcIikge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGluIGEgbWFjcm8gYXJndW1lbnRcIiArIFwiLCBleHBlY3RlZCAnXCIgKyAoZGVsaW1zICYmIGlzRGVsaW1pdGVkID8gZGVsaW1zW21hdGNoXSA6IFwifVwiKSArIFwiJ1wiLCB0b2spO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVsaW1zICYmIGlzRGVsaW1pdGVkKSB7XG4gICAgICAgIGlmICgoZGVwdGggPT09IDAgfHwgZGVwdGggPT09IDEgJiYgZGVsaW1zW21hdGNoXSA9PT0gXCJ7XCIpICYmIHRvay50ZXh0ID09PSBkZWxpbXNbbWF0Y2hdKSB7XG4gICAgICAgICAgKyttYXRjaDtcblxuICAgICAgICAgIGlmIChtYXRjaCA9PT0gZGVsaW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZG9uJ3QgaW5jbHVkZSBkZWxpbXMgaW4gdG9rZW5zXG4gICAgICAgICAgICB0b2tlbnMuc3BsaWNlKC1tYXRjaCwgbWF0Y2gpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdGNoID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKGRlcHRoICE9PSAwIHx8IGlzRGVsaW1pdGVkKTsgLy8gSWYgdGhlIGFyZ3VtZW50IGZvdW5kIC4uLiBoYXMgdGhlIGZvcm0g4oCYezxuZXN0ZWQgdG9rZW5zPn3igJksXG4gICAgLy8gLi4uIHRoZSBvdXRlcm1vc3QgYnJhY2VzIGVuY2xvc2luZyB0aGUgYXJndW1lbnQgYXJlIHJlbW92ZWRcblxuXG4gICAgaWYgKHN0YXJ0LnRleHQgPT09IFwie1wiICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0udGV4dCA9PT0gXCJ9XCIpIHtcbiAgICAgIHRva2Vucy5wb3AoKTtcbiAgICAgIHRva2Vucy5zaGlmdCgpO1xuICAgIH1cblxuICAgIHRva2Vucy5yZXZlcnNlKCk7IC8vIHRvIGZpdCBpbiB3aXRoIHN0YWNrIG9yZGVyXG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zLFxuICAgICAgc3RhcnQsXG4gICAgICBlbmQ6IHRva1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIENvbnN1bWUgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgKGRlbGltaXRlZCkgYXJndW1lbnRzIGZyb20gdGhlIHRva2VuXG4gICAqIHN0cmVhbSBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgYXJyYXkgb2YgYXJndW1lbnRzLlxuICAgKi9cblxuXG4gIGNvbnN1bWVBcmdzKG51bUFyZ3MsIGRlbGltaXRlcnMpIHtcbiAgICBpZiAoZGVsaW1pdGVycykge1xuICAgICAgaWYgKGRlbGltaXRlcnMubGVuZ3RoICE9PSBudW1BcmdzICsgMSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlRoZSBsZW5ndGggb2YgZGVsaW1pdGVycyBkb2Vzbid0IG1hdGNoIHRoZSBudW1iZXIgb2YgYXJncyFcIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBkZWxpbXMgPSBkZWxpbWl0ZXJzWzBdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGltcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdG9rID0gdGhpcy5wb3BUb2tlbigpO1xuXG4gICAgICAgIGlmIChkZWxpbXNbaV0gIT09IHRvay50ZXh0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVc2Ugb2YgdGhlIG1hY3JvIGRvZXNuJ3QgbWF0Y2ggaXRzIGRlZmluaXRpb25cIiwgdG9rKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbnVtQXJnczsgX2krKykge1xuICAgICAgYXJncy5wdXNoKHRoaXMuY29uc3VtZUFyZyhkZWxpbWl0ZXJzICYmIGRlbGltaXRlcnNbX2kgKyAxXSkudG9rZW5zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncztcbiAgfVxuICAvKipcbiAgICogRXhwYW5kIHRoZSBuZXh0IHRva2VuIG9ubHkgb25jZSBpZiBwb3NzaWJsZS5cbiAgICpcbiAgICogSWYgdGhlIHRva2VuIGlzIGV4cGFuZGVkLCB0aGUgcmVzdWx0aW5nIHRva2VucyB3aWxsIGJlIHB1c2hlZCBvbnRvXG4gICAqIHRoZSBzdGFjayBpbiByZXZlcnNlIG9yZGVyLCBhbmQgdGhlIG51bWJlciBvZiBzdWNoIHRva2VucyB3aWxsIGJlXG4gICAqIHJldHVybmVkLiAgVGhpcyBudW1iZXIgbWlnaHQgYmUgemVybyBvciBwb3NpdGl2ZS5cbiAgICpcbiAgICogSWYgbm90LCB0aGUgcmV0dXJuIHZhbHVlIGlzIGBmYWxzZWAsIGFuZCB0aGUgbmV4dCB0b2tlbiByZW1haW5zIGF0IHRoZVxuICAgKiB0b3Agb2YgdGhlIHN0YWNrLlxuICAgKlxuICAgKiBJbiBlaXRoZXIgY2FzZSwgdGhlIG5leHQgdG9rZW4gd2lsbCBiZSBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjayxcbiAgICogb3IgdGhlIHN0YWNrIHdpbGwgYmUgZW1wdHkgKGluIGNhc2Ugb2YgZW1wdHkgZXhwYW5zaW9uXG4gICAqIGFuZCBubyBvdGhlciB0b2tlbnMpLlxuICAgKlxuICAgKiBVc2VkIHRvIGltcGxlbWVudCBgZXhwYW5kQWZ0ZXJGdXR1cmVgIGFuZCBgZXhwYW5kTmV4dFRva2VuYC5cbiAgICpcbiAgICogSWYgZXhwYW5kYWJsZU9ubHksIG9ubHkgZXhwYW5kYWJsZSB0b2tlbnMgYXJlIGV4cGFuZGVkIGFuZFxuICAgKiBhbiB1bmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZSByZXN1bHRzIGluIGFuIGVycm9yLlxuICAgKi9cblxuXG4gIGV4cGFuZE9uY2UoZXhwYW5kYWJsZU9ubHkpIHtcbiAgICB2YXIgdG9wVG9rZW4gPSB0aGlzLnBvcFRva2VuKCk7XG4gICAgdmFyIG5hbWUgPSB0b3BUb2tlbi50ZXh0O1xuICAgIHZhciBleHBhbnNpb24gPSAhdG9wVG9rZW4ubm9leHBhbmQgPyB0aGlzLl9nZXRFeHBhbnNpb24obmFtZSkgOiBudWxsO1xuXG4gICAgaWYgKGV4cGFuc2lvbiA9PSBudWxsIHx8IGV4cGFuZGFibGVPbmx5ICYmIGV4cGFuc2lvbi51bmV4cGFuZGFibGUpIHtcbiAgICAgIGlmIChleHBhbmRhYmxlT25seSAmJiBleHBhbnNpb24gPT0gbnVsbCAmJiBuYW1lWzBdID09PSBcIlxcXFxcIiAmJiAhdGhpcy5pc0RlZmluZWQobmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogXCIgKyBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wdXNoVG9rZW4odG9wVG9rZW4pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuZXhwYW5zaW9uQ291bnQrKztcblxuICAgIGlmICh0aGlzLmV4cGFuc2lvbkNvdW50ID4gdGhpcy5zZXR0aW5ncy5tYXhFeHBhbmQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVG9vIG1hbnkgZXhwYW5zaW9uczogaW5maW5pdGUgbG9vcCBvciBcIiArIFwibmVlZCB0byBpbmNyZWFzZSBtYXhFeHBhbmQgc2V0dGluZ1wiKTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5zID0gZXhwYW5zaW9uLnRva2VucztcbiAgICB2YXIgYXJncyA9IHRoaXMuY29uc3VtZUFyZ3MoZXhwYW5zaW9uLm51bUFyZ3MsIGV4cGFuc2lvbi5kZWxpbWl0ZXJzKTtcblxuICAgIGlmIChleHBhbnNpb24ubnVtQXJncykge1xuICAgICAgLy8gcGFzdGUgYXJndW1lbnRzIGluIHBsYWNlIG9mIHRoZSBwbGFjZWhvbGRlcnNcbiAgICAgIHRva2VucyA9IHRva2Vucy5zbGljZSgpOyAvLyBtYWtlIGEgc2hhbGxvdyBjb3B5XG5cbiAgICAgIGZvciAodmFyIGkgPSB0b2tlbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIHRvayA9IHRva2Vuc1tpXTtcblxuICAgICAgICBpZiAodG9rLnRleHQgPT09IFwiI1wiKSB7XG4gICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW5jb21wbGV0ZSBwbGFjZWhvbGRlciBhdCBlbmQgb2YgbWFjcm8gYm9keVwiLCB0b2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRvayA9IHRva2Vuc1stLWldOyAvLyBuZXh0IHRva2VuIG9uIHN0YWNrXG5cbiAgICAgICAgICBpZiAodG9rLnRleHQgPT09IFwiI1wiKSB7XG4gICAgICAgICAgICAvLyAjIyDihpIgI1xuICAgICAgICAgICAgdG9rZW5zLnNwbGljZShpICsgMSwgMSk7IC8vIGRyb3AgZmlyc3QgI1xuICAgICAgICAgIH0gZWxzZSBpZiAoL15bMS05XSQvLnRlc3QodG9rLnRleHQpKSB7XG4gICAgICAgICAgICAvLyByZXBsYWNlIHRoZSBwbGFjZWhvbGRlciB3aXRoIHRoZSBpbmRpY2F0ZWQgYXJndW1lbnRcbiAgICAgICAgICAgIHRva2Vucy5zcGxpY2UoaSwgMiwgLi4uYXJnc1srdG9rLnRleHQgLSAxXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTm90IGEgdmFsaWQgYXJndW1lbnQgbnVtYmVyXCIsIHRvayk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBDb25jYXRlbmF0ZSBleHBhbnNpb24gb250byB0b3Agb2Ygc3RhY2suXG5cblxuICAgIHRoaXMucHVzaFRva2Vucyh0b2tlbnMpO1xuICAgIHJldHVybiB0b2tlbnMubGVuZ3RoO1xuICB9XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIG5leHQgdG9rZW4gb25seSBvbmNlIChpZiBwb3NzaWJsZSksIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZ1xuICAgKiB0b3AgdG9rZW4gb24gdGhlIHN0YWNrICh3aXRob3V0IHJlbW92aW5nIGFueXRoaW5nIGZyb20gdGhlIHN0YWNrKS5cbiAgICogU2ltaWxhciBpbiBiZWhhdmlvciB0byBUZVgncyBgXFxleHBhbmRhZnRlclxcZnV0dXJlbGV0YC5cbiAgICogRXF1aXZhbGVudCB0byBleHBhbmRPbmNlKCkgZm9sbG93ZWQgYnkgZnV0dXJlKCkuXG4gICAqL1xuXG5cbiAgZXhwYW5kQWZ0ZXJGdXR1cmUoKSB7XG4gICAgdGhpcy5leHBhbmRPbmNlKCk7XG4gICAgcmV0dXJuIHRoaXMuZnV0dXJlKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGV4cGFuZCBmaXJzdCB0b2tlbiwgdGhlbiByZXR1cm4gZmlyc3Qgbm9uLWV4cGFuZGFibGUgdG9rZW4uXG4gICAqL1xuXG5cbiAgZXhwYW5kTmV4dFRva2VuKCkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGlmICh0aGlzLmV4cGFuZE9uY2UoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gZnVsbHkgZXhwYW5kZWRcbiAgICAgICAgdmFyIHRva2VuID0gdGhpcy5zdGFjay5wb3AoKTsgLy8gdGhlIHRva2VuIGFmdGVyIFxcbm9leHBhbmQgaXMgaW50ZXJwcmV0ZWQgYXMgaWYgaXRzIG1lYW5pbmdcbiAgICAgICAgLy8gd2VyZSDigJhcXHJlbGF44oCZXG5cbiAgICAgICAgaWYgKHRva2VuLnRyZWF0QXNSZWxheCkge1xuICAgICAgICAgIHRva2VuLnRleHQgPSBcIlxcXFxyZWxheFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgIH0gLy8gRmxvdyB1bmFibGUgdG8gZmlndXJlIG91dCB0aGF0IHRoaXMgcGF0aHdheSBpcyBpbXBvc3NpYmxlLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy80ODA4XG5cblxuICAgIHRocm93IG5ldyBFcnJvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVucmVhY2hhYmxlXG4gIH1cbiAgLyoqXG4gICAqIEZ1bGx5IGV4cGFuZCB0aGUgZ2l2ZW4gbWFjcm8gbmFtZSBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgbGlzdCBvZlxuICAgKiB0b2tlbnMsIG9yIHJldHVybiBgdW5kZWZpbmVkYCBpZiBubyBzdWNoIG1hY3JvIGlzIGRlZmluZWQuXG4gICAqL1xuXG5cbiAgZXhwYW5kTWFjcm8obmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hY3Jvcy5oYXMobmFtZSkgPyB0aGlzLmV4cGFuZFRva2VucyhbbmV3IFRva2VuKG5hbWUpXSkgOiB1bmRlZmluZWQ7XG4gIH1cbiAgLyoqXG4gICAqIEZ1bGx5IGV4cGFuZCB0aGUgZ2l2ZW4gdG9rZW4gc3RyZWFtIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0IG9mXG4gICAqIHRva2Vucy4gIE5vdGUgdGhhdCB0aGUgaW5wdXQgdG9rZW5zIGFyZSBpbiByZXZlcnNlIG9yZGVyLCBidXQgdGhlXG4gICAqIG91dHB1dCB0b2tlbnMgYXJlIGluIGZvcndhcmQgb3JkZXIuXG4gICAqL1xuXG5cbiAgZXhwYW5kVG9rZW5zKHRva2Vucykge1xuICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICB2YXIgb2xkU3RhY2tMZW5ndGggPSB0aGlzLnN0YWNrLmxlbmd0aDtcbiAgICB0aGlzLnB1c2hUb2tlbnModG9rZW5zKTtcblxuICAgIHdoaWxlICh0aGlzLnN0YWNrLmxlbmd0aCA+IG9sZFN0YWNrTGVuZ3RoKSB7XG4gICAgICAvLyBFeHBhbmQgb25seSBleHBhbmRhYmxlIHRva2Vuc1xuICAgICAgaWYgKHRoaXMuZXhwYW5kT25jZSh0cnVlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gZnVsbHkgZXhwYW5kZWRcbiAgICAgICAgdmFyIHRva2VuID0gdGhpcy5zdGFjay5wb3AoKTtcblxuICAgICAgICBpZiAodG9rZW4udHJlYXRBc1JlbGF4KSB7XG4gICAgICAgICAgLy8gdGhlIGV4cGFuc2lvbiBvZiBcXG5vZXhwYW5kIGlzIHRoZSB0b2tlbiBpdHNlbGZcbiAgICAgICAgICB0b2tlbi5ub2V4cGFuZCA9IGZhbHNlO1xuICAgICAgICAgIHRva2VuLnRyZWF0QXNSZWxheCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0cHV0LnB1c2godG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cbiAgLyoqXG4gICAqIEZ1bGx5IGV4cGFuZCB0aGUgZ2l2ZW4gbWFjcm8gbmFtZSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSBzdHJpbmcsXG4gICAqIG9yIHJldHVybiBgdW5kZWZpbmVkYCBpZiBubyBzdWNoIG1hY3JvIGlzIGRlZmluZWQuXG4gICAqL1xuXG5cbiAgZXhwYW5kTWFjcm9Bc1RleHQobmFtZSkge1xuICAgIHZhciB0b2tlbnMgPSB0aGlzLmV4cGFuZE1hY3JvKG5hbWUpO1xuXG4gICAgaWYgKHRva2Vucykge1xuICAgICAgcmV0dXJuIHRva2Vucy5tYXAodG9rZW4gPT4gdG9rZW4udGV4dCkuam9pbihcIlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRva2VucztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGV4cGFuZGVkIG1hY3JvIGFzIGEgcmV2ZXJzZWQgYXJyYXkgb2YgdG9rZW5zIGFuZCBhIG1hY3JvXG4gICAqIGFyZ3VtZW50IGNvdW50LiAgT3IgcmV0dXJucyBgbnVsbGAgaWYgbm8gc3VjaCBtYWNyby5cbiAgICovXG5cblxuICBfZ2V0RXhwYW5zaW9uKG5hbWUpIHtcbiAgICB2YXIgZGVmaW5pdGlvbiA9IHRoaXMubWFjcm9zLmdldChuYW1lKTtcblxuICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpIHtcbiAgICAgIC8vIG1haW5seSBjaGVja2luZyBmb3IgdW5kZWZpbmVkIGhlcmVcbiAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH0gLy8gSWYgYSBzaW5nbGUgY2hhcmFjdGVyIGhhcyBhbiBhc3NvY2lhdGVkIGNhdGNvZGUgb3RoZXIgdGhhbiAxM1xuICAgIC8vIChhY3RpdmUgY2hhcmFjdGVyKSwgdGhlbiBkb24ndCBleHBhbmQgaXQuXG5cblxuICAgIGlmIChuYW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNhdGNvZGUgPSB0aGlzLmxleGVyLmNhdGNvZGVzW25hbWVdO1xuXG4gICAgICBpZiAoY2F0Y29kZSAhPSBudWxsICYmIGNhdGNvZGUgIT09IDEzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZXhwYW5zaW9uID0gdHlwZW9mIGRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIiA/IGRlZmluaXRpb24odGhpcykgOiBkZWZpbml0aW9uO1xuXG4gICAgaWYgKHR5cGVvZiBleHBhbnNpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHZhciBudW1BcmdzID0gMDtcblxuICAgICAgaWYgKGV4cGFuc2lvbi5pbmRleE9mKFwiI1wiKSAhPT0gLTEpIHtcbiAgICAgICAgdmFyIHN0cmlwcGVkID0gZXhwYW5zaW9uLnJlcGxhY2UoLyMjL2csIFwiXCIpO1xuXG4gICAgICAgIHdoaWxlIChzdHJpcHBlZC5pbmRleE9mKFwiI1wiICsgKG51bUFyZ3MgKyAxKSkgIT09IC0xKSB7XG4gICAgICAgICAgKytudW1BcmdzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBib2R5TGV4ZXIgPSBuZXcgTGV4ZXIoZXhwYW5zaW9uLCB0aGlzLnNldHRpbmdzKTtcbiAgICAgIHZhciB0b2tlbnMgPSBbXTtcbiAgICAgIHZhciB0b2sgPSBib2R5TGV4ZXIubGV4KCk7XG5cbiAgICAgIHdoaWxlICh0b2sudGV4dCAhPT0gXCJFT0ZcIikge1xuICAgICAgICB0b2tlbnMucHVzaCh0b2spO1xuICAgICAgICB0b2sgPSBib2R5TGV4ZXIubGV4KCk7XG4gICAgICB9XG5cbiAgICAgIHRva2Vucy5yZXZlcnNlKCk7IC8vIHRvIGZpdCBpbiB3aXRoIHN0YWNrIHVzaW5nIHB1c2ggYW5kIHBvcFxuXG4gICAgICB2YXIgZXhwYW5kZWQgPSB7XG4gICAgICAgIHRva2VucyxcbiAgICAgICAgbnVtQXJnc1xuICAgICAgfTtcbiAgICAgIHJldHVybiBleHBhbmRlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwYW5zaW9uO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgd2hldGhlciBhIGNvbW1hbmQgaXMgY3VycmVudGx5IFwiZGVmaW5lZFwiIChoYXMgc29tZVxuICAgKiBmdW5jdGlvbmFsaXR5KSwgbWVhbmluZyB0aGF0IGl0J3MgYSBtYWNybyAoaW4gdGhlIGN1cnJlbnQgZ3JvdXApLFxuICAgKiBhIGZ1bmN0aW9uLCBhIHN5bWJvbCwgb3Igb25lIG9mIHRoZSBzcGVjaWFsIGNvbW1hbmRzIGxpc3RlZCBpblxuICAgKiBgaW1wbGljaXRDb21tYW5kc2AuXG4gICAqL1xuXG5cbiAgaXNEZWZpbmVkKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5tYWNyb3MuaGFzKG5hbWUpIHx8IGZ1bmN0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCBzeW1ib2xzLm1hdGguaGFzT3duUHJvcGVydHkobmFtZSkgfHwgc3ltYm9scy50ZXh0Lmhhc093blByb3BlcnR5KG5hbWUpIHx8IGltcGxpY2l0Q29tbWFuZHMuaGFzT3duUHJvcGVydHkobmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIERldGVybWluZSB3aGV0aGVyIGEgY29tbWFuZCBpcyBleHBhbmRhYmxlLlxuICAgKi9cblxuXG4gIGlzRXhwYW5kYWJsZShuYW1lKSB7XG4gICAgdmFyIG1hY3JvID0gdGhpcy5tYWNyb3MuZ2V0KG5hbWUpO1xuICAgIHJldHVybiBtYWNybyAhPSBudWxsID8gdHlwZW9mIG1hY3JvID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBtYWNybyA9PT0gXCJmdW5jdGlvblwiIHx8ICFtYWNyby51bmV4cGFuZGFibGUgOiBmdW5jdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgIWZ1bmN0aW9uc1tuYW1lXS5wcmltaXRpdmU7XG4gIH1cblxufVxuXG4vLyBIZWxwZXJzIGZvciBQYXJzZXIuanMgaGFuZGxpbmcgb2YgVW5pY29kZSAoc3VifHN1cGVyKXNjcmlwdCBjaGFyYWN0ZXJzLlxudmFyIHVuaWNvZGVTdWJSZWdFeCA9IC9eW+KCiuKCi+KCjOKCjeKCjuKCgOKCgeKCguKCg+KChOKCheKChuKCh+KCiOKCieKCkOKCkeKCleG1ouKxvOKCluKCl+KCmOKCmeKCkuKCmuG1o+KCm+KCnOG1pOG1peKCk+G1puG1p+G1qOG1qeG1ql0vO1xudmFyIHVTdWJzQW5kU3VwcyA9IE9iamVjdC5mcmVlemUoe1xuICAn4oKKJzogJysnLFxuICAn4oKLJzogJy0nLFxuICAn4oKMJzogJz0nLFxuICAn4oKNJzogJygnLFxuICAn4oKOJzogJyknLFxuICAn4oKAJzogJzAnLFxuICAn4oKBJzogJzEnLFxuICAn4oKCJzogJzInLFxuICAn4oKDJzogJzMnLFxuICAn4oKEJzogJzQnLFxuICAn4oKFJzogJzUnLFxuICAn4oKGJzogJzYnLFxuICAn4oKHJzogJzcnLFxuICAn4oKIJzogJzgnLFxuICAn4oKJJzogJzknLFxuICAnXFx1MjA5MCc6ICdhJyxcbiAgJ1xcdTIwOTEnOiAnZScsXG4gICdcXHUyMDk1JzogJ2gnLFxuICAnXFx1MUQ2Mic6ICdpJyxcbiAgJ1xcdTJDN0MnOiAnaicsXG4gICdcXHUyMDk2JzogJ2snLFxuICAnXFx1MjA5Nyc6ICdsJyxcbiAgJ1xcdTIwOTgnOiAnbScsXG4gICdcXHUyMDk5JzogJ24nLFxuICAnXFx1MjA5Mic6ICdvJyxcbiAgJ1xcdTIwOUEnOiAncCcsXG4gICdcXHUxRDYzJzogJ3InLFxuICAnXFx1MjA5Qic6ICdzJyxcbiAgJ1xcdTIwOUMnOiAndCcsXG4gICdcXHUxRDY0JzogJ3UnLFxuICAnXFx1MUQ2NSc6ICd2JyxcbiAgJ1xcdTIwOTMnOiAneCcsXG4gICdcXHUxRDY2JzogJ86yJyxcbiAgJ1xcdTFENjcnOiAnzrMnLFxuICAnXFx1MUQ2OCc6ICfPgScsXG4gICdcXHUxRDY5JzogJ1xcdTAzZDUnLFxuICAnXFx1MUQ2QSc6ICfPhycsXG4gICfigbonOiAnKycsXG4gICfigbsnOiAnLScsXG4gICfigbwnOiAnPScsXG4gICfigb0nOiAnKCcsXG4gICfigb4nOiAnKScsXG4gICfigbAnOiAnMCcsXG4gICfCuSc6ICcxJyxcbiAgJ8KyJzogJzInLFxuICAnwrMnOiAnMycsXG4gICfigbQnOiAnNCcsXG4gICfigbUnOiAnNScsXG4gICfigbYnOiAnNicsXG4gICfigbcnOiAnNycsXG4gICfigbgnOiAnOCcsXG4gICfigbknOiAnOScsXG4gICdcXHUxRDJDJzogJ0EnLFxuICAnXFx1MUQyRSc6ICdCJyxcbiAgJ1xcdTFEMzAnOiAnRCcsXG4gICdcXHUxRDMxJzogJ0UnLFxuICAnXFx1MUQzMyc6ICdHJyxcbiAgJ1xcdTFEMzQnOiAnSCcsXG4gICdcXHUxRDM1JzogJ0knLFxuICAnXFx1MUQzNic6ICdKJyxcbiAgJ1xcdTFEMzcnOiAnSycsXG4gICdcXHUxRDM4JzogJ0wnLFxuICAnXFx1MUQzOSc6ICdNJyxcbiAgJ1xcdTFEM0EnOiAnTicsXG4gICdcXHUxRDNDJzogJ08nLFxuICAnXFx1MUQzRSc6ICdQJyxcbiAgJ1xcdTFEM0YnOiAnUicsXG4gICdcXHUxRDQwJzogJ1QnLFxuICAnXFx1MUQ0MSc6ICdVJyxcbiAgJ1xcdTJDN0QnOiAnVicsXG4gICdcXHUxRDQyJzogJ1cnLFxuICAnXFx1MUQ0Myc6ICdhJyxcbiAgJ1xcdTFENDcnOiAnYicsXG4gICdcXHUxRDlDJzogJ2MnLFxuICAnXFx1MUQ0OCc6ICdkJyxcbiAgJ1xcdTFENDknOiAnZScsXG4gICdcXHUxREEwJzogJ2YnLFxuICAnXFx1MUQ0RCc6ICdnJyxcbiAgJ1xcdTAyQjAnOiAnaCcsXG4gICdcXHUyMDcxJzogJ2knLFxuICAnXFx1MDJCMic6ICdqJyxcbiAgJ1xcdTFENEYnOiAnaycsXG4gICdcXHUwMkUxJzogJ2wnLFxuICAnXFx1MUQ1MCc6ICdtJyxcbiAgJ1xcdTIwN0YnOiAnbicsXG4gICdcXHUxRDUyJzogJ28nLFxuICAnXFx1MUQ1Nic6ICdwJyxcbiAgJ1xcdTAyQjMnOiAncicsXG4gICdcXHUwMkUyJzogJ3MnLFxuICAnXFx1MUQ1Nyc6ICd0JyxcbiAgJ1xcdTFENTgnOiAndScsXG4gICdcXHUxRDVCJzogJ3YnLFxuICAnXFx1MDJCNyc6ICd3JyxcbiAgJ1xcdTAyRTMnOiAneCcsXG4gICdcXHUwMkI4JzogJ3knLFxuICAnXFx1MURCQic6ICd6JyxcbiAgJ1xcdTFENUQnOiAnzrInLFxuICAnXFx1MUQ1RSc6ICfOsycsXG4gICdcXHUxRDVGJzogJ860JyxcbiAgJ1xcdTFENjAnOiAnXFx1MDNkNScsXG4gICdcXHUxRDYxJzogJ8+HJyxcbiAgJ1xcdTFEQkYnOiAnzrgnXG59KTtcblxuLyogZXNsaW50IG5vLWNvbnN0YW50LWNvbmRpdGlvbjowICovXG5cbnZhciB1bmljb2RlQWNjZW50cyA9IHtcbiAgXCLMgVwiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXCdcIixcbiAgICBcIm1hdGhcIjogXCJcXFxcYWN1dGVcIlxuICB9LFxuICBcIsyAXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcYFwiLFxuICAgIFwibWF0aFwiOiBcIlxcXFxncmF2ZVwiXG4gIH0sXG4gIFwizIhcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFxcXFwiXCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGRkb3RcIlxuICB9LFxuICBcIsyDXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcflwiLFxuICAgIFwibWF0aFwiOiBcIlxcXFx0aWxkZVwiXG4gIH0sXG4gIFwizIRcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFw9XCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGJhclwiXG4gIH0sXG4gIFwizIZcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFx1XCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGJyZXZlXCJcbiAgfSxcbiAgXCLMjFwiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXHZcIixcbiAgICBcIm1hdGhcIjogXCJcXFxcY2hlY2tcIlxuICB9LFxuICBcIsyCXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcXlwiLFxuICAgIFwibWF0aFwiOiBcIlxcXFxoYXRcIlxuICB9LFxuICBcIsyHXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcLlwiLFxuICAgIFwibWF0aFwiOiBcIlxcXFxkb3RcIlxuICB9LFxuICBcIsyKXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcclwiLFxuICAgIFwibWF0aFwiOiBcIlxcXFxtYXRocmluZ1wiXG4gIH0sXG4gIFwizItcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFxIXCJcbiAgfSxcbiAgXCLMp1wiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXGNcIlxuICB9XG59O1xudmFyIHVuaWNvZGVTeW1ib2xzID0ge1xuICBcIsOhXCI6IFwiYcyBXCIsXG4gIFwiw6BcIjogXCJhzIBcIixcbiAgXCLDpFwiOiBcImHMiFwiLFxuICBcIsefXCI6IFwiYcyIzIRcIixcbiAgXCLDo1wiOiBcImHMg1wiLFxuICBcIsSBXCI6IFwiYcyEXCIsXG4gIFwixINcIjogXCJhzIZcIixcbiAgXCLhuq9cIjogXCJhzIbMgVwiLFxuICBcIuG6sVwiOiBcImHMhsyAXCIsXG4gIFwi4bq1XCI6IFwiYcyGzINcIixcbiAgXCLHjlwiOiBcImHMjFwiLFxuICBcIsOiXCI6IFwiYcyCXCIsXG4gIFwi4bqlXCI6IFwiYcyCzIFcIixcbiAgXCLhuqdcIjogXCJhzILMgFwiLFxuICBcIuG6q1wiOiBcImHMgsyDXCIsXG4gIFwiyKdcIjogXCJhzIdcIixcbiAgXCLHoVwiOiBcImHMh8yEXCIsXG4gIFwiw6VcIjogXCJhzIpcIixcbiAgXCLHu1wiOiBcImHMisyBXCIsXG4gIFwi4biDXCI6IFwiYsyHXCIsXG4gIFwixIdcIjogXCJjzIFcIixcbiAgXCLhuIlcIjogXCJjzKfMgVwiLFxuICBcIsSNXCI6IFwiY8yMXCIsXG4gIFwixIlcIjogXCJjzIJcIixcbiAgXCLEi1wiOiBcImPMh1wiLFxuICBcIsOnXCI6IFwiY8ynXCIsXG4gIFwixI9cIjogXCJkzIxcIixcbiAgXCLhuItcIjogXCJkzIdcIixcbiAgXCLhuJFcIjogXCJkzKdcIixcbiAgXCLDqVwiOiBcImXMgVwiLFxuICBcIsOoXCI6IFwiZcyAXCIsXG4gIFwiw6tcIjogXCJlzIhcIixcbiAgXCLhur1cIjogXCJlzINcIixcbiAgXCLEk1wiOiBcImXMhFwiLFxuICBcIuG4l1wiOiBcImXMhMyBXCIsXG4gIFwi4biVXCI6IFwiZcyEzIBcIixcbiAgXCLElVwiOiBcImXMhlwiLFxuICBcIuG4nVwiOiBcImXMp8yGXCIsXG4gIFwixJtcIjogXCJlzIxcIixcbiAgXCLDqlwiOiBcImXMglwiLFxuICBcIuG6v1wiOiBcImXMgsyBXCIsXG4gIFwi4buBXCI6IFwiZcyCzIBcIixcbiAgXCLhu4VcIjogXCJlzILMg1wiLFxuICBcIsSXXCI6IFwiZcyHXCIsXG4gIFwiyKlcIjogXCJlzKdcIixcbiAgXCLhuJ9cIjogXCJmzIdcIixcbiAgXCLHtVwiOiBcImfMgVwiLFxuICBcIuG4oVwiOiBcImfMhFwiLFxuICBcIsSfXCI6IFwiZ8yGXCIsXG4gIFwix6dcIjogXCJnzIxcIixcbiAgXCLEnVwiOiBcImfMglwiLFxuICBcIsShXCI6IFwiZ8yHXCIsXG4gIFwixKNcIjogXCJnzKdcIixcbiAgXCLhuKdcIjogXCJozIhcIixcbiAgXCLIn1wiOiBcImjMjFwiLFxuICBcIsSlXCI6IFwiaMyCXCIsXG4gIFwi4bijXCI6IFwiaMyHXCIsXG4gIFwi4bipXCI6IFwiaMynXCIsXG4gIFwiw61cIjogXCJpzIFcIixcbiAgXCLDrFwiOiBcImnMgFwiLFxuICBcIsOvXCI6IFwiacyIXCIsXG4gIFwi4bivXCI6IFwiacyIzIFcIixcbiAgXCLEqVwiOiBcImnMg1wiLFxuICBcIsSrXCI6IFwiacyEXCIsXG4gIFwixK1cIjogXCJpzIZcIixcbiAgXCLHkFwiOiBcImnMjFwiLFxuICBcIsOuXCI6IFwiacyCXCIsXG4gIFwix7BcIjogXCJqzIxcIixcbiAgXCLEtVwiOiBcImrMglwiLFxuICBcIuG4sVwiOiBcImvMgVwiLFxuICBcIsepXCI6IFwia8yMXCIsXG4gIFwixLdcIjogXCJrzKdcIixcbiAgXCLEulwiOiBcImzMgVwiLFxuICBcIsS+XCI6IFwibMyMXCIsXG4gIFwixLxcIjogXCJszKdcIixcbiAgXCLhuL9cIjogXCJtzIFcIixcbiAgXCLhuYFcIjogXCJtzIdcIixcbiAgXCLFhFwiOiBcIm7MgVwiLFxuICBcIse5XCI6IFwibsyAXCIsXG4gIFwiw7FcIjogXCJuzINcIixcbiAgXCLFiFwiOiBcIm7MjFwiLFxuICBcIuG5hVwiOiBcIm7Mh1wiLFxuICBcIsWGXCI6IFwibsynXCIsXG4gIFwiw7NcIjogXCJvzIFcIixcbiAgXCLDslwiOiBcIm/MgFwiLFxuICBcIsO2XCI6IFwib8yIXCIsXG4gIFwiyKtcIjogXCJvzIjMhFwiLFxuICBcIsO1XCI6IFwib8yDXCIsXG4gIFwi4bmNXCI6IFwib8yDzIFcIixcbiAgXCLhuY9cIjogXCJvzIPMiFwiLFxuICBcIsitXCI6IFwib8yDzIRcIixcbiAgXCLFjVwiOiBcIm/MhFwiLFxuICBcIuG5k1wiOiBcIm/MhMyBXCIsXG4gIFwi4bmRXCI6IFwib8yEzIBcIixcbiAgXCLFj1wiOiBcIm/MhlwiLFxuICBcIseSXCI6IFwib8yMXCIsXG4gIFwiw7RcIjogXCJvzIJcIixcbiAgXCLhu5FcIjogXCJvzILMgVwiLFxuICBcIuG7k1wiOiBcIm/MgsyAXCIsXG4gIFwi4buXXCI6IFwib8yCzINcIixcbiAgXCLIr1wiOiBcIm/Mh1wiLFxuICBcIsixXCI6IFwib8yHzIRcIixcbiAgXCLFkVwiOiBcIm/Mi1wiLFxuICBcIuG5lVwiOiBcInDMgVwiLFxuICBcIuG5l1wiOiBcInDMh1wiLFxuICBcIsWVXCI6IFwicsyBXCIsXG4gIFwixZlcIjogXCJyzIxcIixcbiAgXCLhuZlcIjogXCJyzIdcIixcbiAgXCLFl1wiOiBcInLMp1wiLFxuICBcIsWbXCI6IFwic8yBXCIsXG4gIFwi4bmlXCI6IFwic8yBzIdcIixcbiAgXCLFoVwiOiBcInPMjFwiLFxuICBcIuG5p1wiOiBcInPMjMyHXCIsXG4gIFwixZ1cIjogXCJzzIJcIixcbiAgXCLhuaFcIjogXCJzzIdcIixcbiAgXCLFn1wiOiBcInPMp1wiLFxuICBcIuG6l1wiOiBcInTMiFwiLFxuICBcIsWlXCI6IFwidMyMXCIsXG4gIFwi4bmrXCI6IFwidMyHXCIsXG4gIFwixaNcIjogXCJ0zKdcIixcbiAgXCLDulwiOiBcInXMgVwiLFxuICBcIsO5XCI6IFwidcyAXCIsXG4gIFwiw7xcIjogXCJ1zIhcIixcbiAgXCLHmFwiOiBcInXMiMyBXCIsXG4gIFwix5xcIjogXCJ1zIjMgFwiLFxuICBcIseWXCI6IFwidcyIzIRcIixcbiAgXCLHmlwiOiBcInXMiMyMXCIsXG4gIFwixalcIjogXCJ1zINcIixcbiAgXCLhublcIjogXCJ1zIPMgVwiLFxuICBcIsWrXCI6IFwidcyEXCIsXG4gIFwi4bm7XCI6IFwidcyEzIhcIixcbiAgXCLFrVwiOiBcInXMhlwiLFxuICBcIseUXCI6IFwidcyMXCIsXG4gIFwiw7tcIjogXCJ1zIJcIixcbiAgXCLFr1wiOiBcInXMilwiLFxuICBcIsWxXCI6IFwidcyLXCIsXG4gIFwi4bm9XCI6IFwidsyDXCIsXG4gIFwi4bqDXCI6IFwid8yBXCIsXG4gIFwi4bqBXCI6IFwid8yAXCIsXG4gIFwi4bqFXCI6IFwid8yIXCIsXG4gIFwixbVcIjogXCJ3zIJcIixcbiAgXCLhuodcIjogXCJ3zIdcIixcbiAgXCLhuphcIjogXCJ3zIpcIixcbiAgXCLhuo1cIjogXCJ4zIhcIixcbiAgXCLhuotcIjogXCJ4zIdcIixcbiAgXCLDvVwiOiBcInnMgVwiLFxuICBcIuG7s1wiOiBcInnMgFwiLFxuICBcIsO/XCI6IFwiecyIXCIsXG4gIFwi4bu5XCI6IFwiecyDXCIsXG4gIFwiyLNcIjogXCJ5zIRcIixcbiAgXCLFt1wiOiBcInnMglwiLFxuICBcIuG6j1wiOiBcInnMh1wiLFxuICBcIuG6mVwiOiBcInnMilwiLFxuICBcIsW6XCI6IFwiesyBXCIsXG4gIFwixb5cIjogXCJ6zIxcIixcbiAgXCLhupFcIjogXCJ6zIJcIixcbiAgXCLFvFwiOiBcInrMh1wiLFxuICBcIsOBXCI6IFwiQcyBXCIsXG4gIFwiw4BcIjogXCJBzIBcIixcbiAgXCLDhFwiOiBcIkHMiFwiLFxuICBcIseeXCI6IFwiQcyIzIRcIixcbiAgXCLDg1wiOiBcIkHMg1wiLFxuICBcIsSAXCI6IFwiQcyEXCIsXG4gIFwixIJcIjogXCJBzIZcIixcbiAgXCLhuq5cIjogXCJBzIbMgVwiLFxuICBcIuG6sFwiOiBcIkHMhsyAXCIsXG4gIFwi4bq0XCI6IFwiQcyGzINcIixcbiAgXCLHjVwiOiBcIkHMjFwiLFxuICBcIsOCXCI6IFwiQcyCXCIsXG4gIFwi4bqkXCI6IFwiQcyCzIFcIixcbiAgXCLhuqZcIjogXCJBzILMgFwiLFxuICBcIuG6qlwiOiBcIkHMgsyDXCIsXG4gIFwiyKZcIjogXCJBzIdcIixcbiAgXCLHoFwiOiBcIkHMh8yEXCIsXG4gIFwiw4VcIjogXCJBzIpcIixcbiAgXCLHulwiOiBcIkHMisyBXCIsXG4gIFwi4biCXCI6IFwiQsyHXCIsXG4gIFwixIZcIjogXCJDzIFcIixcbiAgXCLhuIhcIjogXCJDzKfMgVwiLFxuICBcIsSMXCI6IFwiQ8yMXCIsXG4gIFwixIhcIjogXCJDzIJcIixcbiAgXCLEilwiOiBcIkPMh1wiLFxuICBcIsOHXCI6IFwiQ8ynXCIsXG4gIFwixI5cIjogXCJEzIxcIixcbiAgXCLhuIpcIjogXCJEzIdcIixcbiAgXCLhuJBcIjogXCJEzKdcIixcbiAgXCLDiVwiOiBcIkXMgVwiLFxuICBcIsOIXCI6IFwiRcyAXCIsXG4gIFwiw4tcIjogXCJFzIhcIixcbiAgXCLhurxcIjogXCJFzINcIixcbiAgXCLEklwiOiBcIkXMhFwiLFxuICBcIuG4llwiOiBcIkXMhMyBXCIsXG4gIFwi4biUXCI6IFwiRcyEzIBcIixcbiAgXCLElFwiOiBcIkXMhlwiLFxuICBcIuG4nFwiOiBcIkXMp8yGXCIsXG4gIFwixJpcIjogXCJFzIxcIixcbiAgXCLDilwiOiBcIkXMglwiLFxuICBcIuG6vlwiOiBcIkXMgsyBXCIsXG4gIFwi4buAXCI6IFwiRcyCzIBcIixcbiAgXCLhu4RcIjogXCJFzILMg1wiLFxuICBcIsSWXCI6IFwiRcyHXCIsXG4gIFwiyKhcIjogXCJFzKdcIixcbiAgXCLhuJ5cIjogXCJGzIdcIixcbiAgXCLHtFwiOiBcIkfMgVwiLFxuICBcIuG4oFwiOiBcIkfMhFwiLFxuICBcIsSeXCI6IFwiR8yGXCIsXG4gIFwix6ZcIjogXCJHzIxcIixcbiAgXCLEnFwiOiBcIkfMglwiLFxuICBcIsSgXCI6IFwiR8yHXCIsXG4gIFwixKJcIjogXCJHzKdcIixcbiAgXCLhuKZcIjogXCJIzIhcIixcbiAgXCLInlwiOiBcIkjMjFwiLFxuICBcIsSkXCI6IFwiSMyCXCIsXG4gIFwi4biiXCI6IFwiSMyHXCIsXG4gIFwi4bioXCI6IFwiSMynXCIsXG4gIFwiw41cIjogXCJJzIFcIixcbiAgXCLDjFwiOiBcIknMgFwiLFxuICBcIsOPXCI6IFwiScyIXCIsXG4gIFwi4biuXCI6IFwiScyIzIFcIixcbiAgXCLEqFwiOiBcIknMg1wiLFxuICBcIsSqXCI6IFwiScyEXCIsXG4gIFwixKxcIjogXCJJzIZcIixcbiAgXCLHj1wiOiBcIknMjFwiLFxuICBcIsOOXCI6IFwiScyCXCIsXG4gIFwixLBcIjogXCJJzIdcIixcbiAgXCLEtFwiOiBcIkrMglwiLFxuICBcIuG4sFwiOiBcIkvMgVwiLFxuICBcIseoXCI6IFwiS8yMXCIsXG4gIFwixLZcIjogXCJLzKdcIixcbiAgXCLEuVwiOiBcIkzMgVwiLFxuICBcIsS9XCI6IFwiTMyMXCIsXG4gIFwixLtcIjogXCJMzKdcIixcbiAgXCLhuL5cIjogXCJNzIFcIixcbiAgXCLhuYBcIjogXCJNzIdcIixcbiAgXCLFg1wiOiBcIk7MgVwiLFxuICBcIse4XCI6IFwiTsyAXCIsXG4gIFwiw5FcIjogXCJOzINcIixcbiAgXCLFh1wiOiBcIk7MjFwiLFxuICBcIuG5hFwiOiBcIk7Mh1wiLFxuICBcIsWFXCI6IFwiTsynXCIsXG4gIFwiw5NcIjogXCJPzIFcIixcbiAgXCLDklwiOiBcIk/MgFwiLFxuICBcIsOWXCI6IFwiT8yIXCIsXG4gIFwiyKpcIjogXCJPzIjMhFwiLFxuICBcIsOVXCI6IFwiT8yDXCIsXG4gIFwi4bmMXCI6IFwiT8yDzIFcIixcbiAgXCLhuY5cIjogXCJPzIPMiFwiLFxuICBcIsisXCI6IFwiT8yDzIRcIixcbiAgXCLFjFwiOiBcIk/MhFwiLFxuICBcIuG5klwiOiBcIk/MhMyBXCIsXG4gIFwi4bmQXCI6IFwiT8yEzIBcIixcbiAgXCLFjlwiOiBcIk/MhlwiLFxuICBcIseRXCI6IFwiT8yMXCIsXG4gIFwiw5RcIjogXCJPzIJcIixcbiAgXCLhu5BcIjogXCJPzILMgVwiLFxuICBcIuG7klwiOiBcIk/MgsyAXCIsXG4gIFwi4buWXCI6IFwiT8yCzINcIixcbiAgXCLIrlwiOiBcIk/Mh1wiLFxuICBcIsiwXCI6IFwiT8yHzIRcIixcbiAgXCLFkFwiOiBcIk/Mi1wiLFxuICBcIuG5lFwiOiBcIlDMgVwiLFxuICBcIuG5llwiOiBcIlDMh1wiLFxuICBcIsWUXCI6IFwiUsyBXCIsXG4gIFwixZhcIjogXCJSzIxcIixcbiAgXCLhuZhcIjogXCJSzIdcIixcbiAgXCLFllwiOiBcIlLMp1wiLFxuICBcIsWaXCI6IFwiU8yBXCIsXG4gIFwi4bmkXCI6IFwiU8yBzIdcIixcbiAgXCLFoFwiOiBcIlPMjFwiLFxuICBcIuG5plwiOiBcIlPMjMyHXCIsXG4gIFwixZxcIjogXCJTzIJcIixcbiAgXCLhuaBcIjogXCJTzIdcIixcbiAgXCLFnlwiOiBcIlPMp1wiLFxuICBcIsWkXCI6IFwiVMyMXCIsXG4gIFwi4bmqXCI6IFwiVMyHXCIsXG4gIFwixaJcIjogXCJUzKdcIixcbiAgXCLDmlwiOiBcIlXMgVwiLFxuICBcIsOZXCI6IFwiVcyAXCIsXG4gIFwiw5xcIjogXCJVzIhcIixcbiAgXCLHl1wiOiBcIlXMiMyBXCIsXG4gIFwix5tcIjogXCJVzIjMgFwiLFxuICBcIseVXCI6IFwiVcyIzIRcIixcbiAgXCLHmVwiOiBcIlXMiMyMXCIsXG4gIFwixahcIjogXCJVzINcIixcbiAgXCLhubhcIjogXCJVzIPMgVwiLFxuICBcIsWqXCI6IFwiVcyEXCIsXG4gIFwi4bm6XCI6IFwiVcyEzIhcIixcbiAgXCLFrFwiOiBcIlXMhlwiLFxuICBcIseTXCI6IFwiVcyMXCIsXG4gIFwiw5tcIjogXCJVzIJcIixcbiAgXCLFrlwiOiBcIlXMilwiLFxuICBcIsWwXCI6IFwiVcyLXCIsXG4gIFwi4bm8XCI6IFwiVsyDXCIsXG4gIFwi4bqCXCI6IFwiV8yBXCIsXG4gIFwi4bqAXCI6IFwiV8yAXCIsXG4gIFwi4bqEXCI6IFwiV8yIXCIsXG4gIFwixbRcIjogXCJXzIJcIixcbiAgXCLhuoZcIjogXCJXzIdcIixcbiAgXCLhuoxcIjogXCJYzIhcIixcbiAgXCLhuopcIjogXCJYzIdcIixcbiAgXCLDnVwiOiBcIlnMgVwiLFxuICBcIuG7slwiOiBcIlnMgFwiLFxuICBcIsW4XCI6IFwiWcyIXCIsXG4gIFwi4bu4XCI6IFwiWcyDXCIsXG4gIFwiyLJcIjogXCJZzIRcIixcbiAgXCLFtlwiOiBcIlnMglwiLFxuICBcIuG6jlwiOiBcIlnMh1wiLFxuICBcIsW5XCI6IFwiWsyBXCIsXG4gIFwixb1cIjogXCJazIxcIixcbiAgXCLhupBcIjogXCJazIJcIixcbiAgXCLFu1wiOiBcIlrMh1wiLFxuICBcIs6sXCI6IFwizrHMgVwiLFxuICBcIuG9sFwiOiBcIs6xzIBcIixcbiAgXCLhvrFcIjogXCLOscyEXCIsXG4gIFwi4b6wXCI6IFwizrHMhlwiLFxuICBcIs6tXCI6IFwizrXMgVwiLFxuICBcIuG9slwiOiBcIs61zIBcIixcbiAgXCLOrlwiOiBcIs63zIFcIixcbiAgXCLhvbRcIjogXCLOt8yAXCIsXG4gIFwizq9cIjogXCLOucyBXCIsXG4gIFwi4b22XCI6IFwizrnMgFwiLFxuICBcIs+KXCI6IFwizrnMiFwiLFxuICBcIs6QXCI6IFwizrnMiMyBXCIsXG4gIFwi4b+SXCI6IFwizrnMiMyAXCIsXG4gIFwi4b+RXCI6IFwizrnMhFwiLFxuICBcIuG/kFwiOiBcIs65zIZcIixcbiAgXCLPjFwiOiBcIs6/zIFcIixcbiAgXCLhvbhcIjogXCLOv8yAXCIsXG4gIFwiz41cIjogXCLPhcyBXCIsXG4gIFwi4b26XCI6IFwiz4XMgFwiLFxuICBcIs+LXCI6IFwiz4XMiFwiLFxuICBcIs6wXCI6IFwiz4XMiMyBXCIsXG4gIFwi4b+iXCI6IFwiz4XMiMyAXCIsXG4gIFwi4b+hXCI6IFwiz4XMhFwiLFxuICBcIuG/oFwiOiBcIs+FzIZcIixcbiAgXCLPjlwiOiBcIs+JzIFcIixcbiAgXCLhvbxcIjogXCLPicyAXCIsXG4gIFwizo5cIjogXCLOpcyBXCIsXG4gIFwi4b+qXCI6IFwizqXMgFwiLFxuICBcIs6rXCI6IFwizqXMiFwiLFxuICBcIuG/qVwiOiBcIs6lzIRcIixcbiAgXCLhv6hcIjogXCLOpcyGXCIsXG4gIFwizo9cIjogXCLOqcyBXCIsXG4gIFwi4b+6XCI6IFwizqnMgFwiXG59O1xuXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcGFyc2VyIHVzZWQgdG8gcGFyc2Ugb3V0IGEgVGVYIGV4cHJlc3Npb24gZnJvbSB0aGVcbiAqIGlucHV0LiBTaW5jZSBUZVggaXNuJ3QgY29udGV4dC1mcmVlLCBzdGFuZGFyZCBwYXJzZXJzIGRvbid0IHdvcmsgcGFydGljdWxhcmx5XG4gKiB3ZWxsLlxuICpcbiAqIFRoZSBzdHJhdGVneSBvZiB0aGlzIHBhcnNlciBpcyBhcyBzdWNoOlxuICpcbiAqIFRoZSBtYWluIGZ1bmN0aW9ucyAodGhlIGAucGFyc2UuLi5gIG9uZXMpIHRha2UgYSBwb3NpdGlvbiBpbiB0aGUgY3VycmVudFxuICogcGFyc2Ugc3RyaW5nIHRvIHBhcnNlIHRva2VucyBmcm9tLiBUaGUgbGV4ZXIgKGZvdW5kIGluIExleGVyLmpzLCBzdG9yZWQgYXRcbiAqIHRoaXMuZ3VsbGV0LmxleGVyKSBhbHNvIHN1cHBvcnRzIHB1bGxpbmcgb3V0IHRva2VucyBhdCBhcmJpdHJhcnkgcGxhY2VzLiBXaGVuXG4gKiBpbmRpdmlkdWFsIHRva2VucyBhcmUgbmVlZGVkIGF0IGEgcG9zaXRpb24sIHRoZSBsZXhlciBpcyBjYWxsZWQgdG8gcHVsbCBvdXQgYVxuICogdG9rZW4sIHdoaWNoIGlzIHRoZW4gdXNlZC5cbiAqXG4gKiBUaGUgcGFyc2VyIGhhcyBhIHByb3BlcnR5IGNhbGxlZCBcIm1vZGVcIiBpbmRpY2F0aW5nIHRoZSBtb2RlIHRoYXRcbiAqIHRoZSBwYXJzZXIgaXMgY3VycmVudGx5IGluLiBDdXJyZW50bHkgaXQgaGFzIHRvIGJlIG9uZSBvZiBcIm1hdGhcIiBvclxuICogXCJ0ZXh0XCIsIHdoaWNoIGRlbm90ZXMgd2hldGhlciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIG1hdGgteVxuICogb25lIG9yIGEgdGV4dC15IG9uZSAoZS5nLiBpbnNpZGUgXFx0ZXh0KS4gQ3VycmVudGx5LCB0aGlzIHNlcnZlcyB0b1xuICogbGltaXQgdGhlIGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0ZXh0IG1vZGUuXG4gKlxuICogVGhlIG1haW4gZnVuY3Rpb25zIHRoZW4gcmV0dXJuIGFuIG9iamVjdCB3aGljaCBjb250YWlucyB0aGUgdXNlZnVsIGRhdGEgdGhhdFxuICogd2FzIHBhcnNlZCBhdCBpdHMgZ2l2ZW4gcG9pbnQsIGFuZCBhIG5ldyBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJzZWRcbiAqIGRhdGEuIFRoZSBtYWluIGZ1bmN0aW9ucyBjYW4gY2FsbCBlYWNoIG90aGVyIGFuZCBjb250aW51ZSB0aGUgcGFyc2luZyBieVxuICogdXNpbmcgdGhlIHJldHVybmVkIHBvc2l0aW9uIGFzIGEgbmV3IHN0YXJ0aW5nIHBvaW50LlxuICpcbiAqIFRoZXJlIGFyZSBhbHNvIGV4dHJhIGAuaGFuZGxlLi4uYCBmdW5jdGlvbnMsIHdoaWNoIHB1bGwgb3V0IHNvbWUgcmV1c2VkXG4gKiBmdW5jdGlvbmFsaXR5IGludG8gc2VsZi1jb250YWluZWQgZnVuY3Rpb25zLlxuICpcbiAqIFRoZSBmdW5jdGlvbnMgcmV0dXJuIFBhcnNlTm9kZXMuXG4gKi9cbmNsYXNzIFBhcnNlciB7XG4gIGNvbnN0cnVjdG9yKGlucHV0LCBzZXR0aW5ncykge1xuICAgIHRoaXMubW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLmd1bGxldCA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMubGVmdHJpZ2h0RGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5uZXh0VG9rZW4gPSB2b2lkIDA7XG4gICAgLy8gU3RhcnQgaW4gbWF0aCBtb2RlXG4gICAgdGhpcy5tb2RlID0gXCJtYXRoXCI7IC8vIENyZWF0ZSBhIG5ldyBtYWNybyBleHBhbmRlciAoZ3VsbGV0KSBhbmQgKGluZGlyZWN0bHkgdmlhIHRoYXQpIGFsc28gYVxuICAgIC8vIG5ldyBsZXhlciAobW91dGgpIGZvciB0aGlzIHBhcnNlciAoc3RvbWFjaCwgaW4gdGhlIGxhbmd1YWdlIG9mIFRlWClcblxuICAgIHRoaXMuZ3VsbGV0ID0gbmV3IE1hY3JvRXhwYW5kZXIoaW5wdXQsIHNldHRpbmdzLCB0aGlzLm1vZGUpOyAvLyBTdG9yZSB0aGUgc2V0dGluZ3MgZm9yIHVzZSBpbiBwYXJzaW5nXG5cbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7IC8vIENvdW50IGxlZnRyaWdodCBkZXB0aCAoZm9yIFxcbWlkZGxlIGVycm9ycylcblxuICAgIHRoaXMubGVmdHJpZ2h0RGVwdGggPSAwO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3MgYSByZXN1bHQgdG8gbWFrZSBzdXJlIGl0IGhhcyB0aGUgcmlnaHQgdHlwZSwgYW5kIHRocm93cyBhblxuICAgKiBhcHByb3ByaWF0ZSBlcnJvciBvdGhlcndpc2UuXG4gICAqL1xuXG5cbiAgZXhwZWN0KHRleHQsIGNvbnN1bWUpIHtcbiAgICBpZiAoY29uc3VtZSA9PT0gdm9pZCAwKSB7XG4gICAgICBjb25zdW1lID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mZXRjaCgpLnRleHQgIT09IHRleHQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgdGV4dCArIFwiJywgZ290ICdcIiArIHRoaXMuZmV0Y2goKS50ZXh0ICsgXCInXCIsIHRoaXMuZmV0Y2goKSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnN1bWUpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRGlzY2FyZHMgdGhlIGN1cnJlbnQgbG9va2FoZWFkIHRva2VuLCBjb25zaWRlcmluZyBpdCBjb25zdW1lZC5cbiAgICovXG5cblxuICBjb25zdW1lKCkge1xuICAgIHRoaXMubmV4dFRva2VuID0gbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IGxvb2thaGVhZCB0b2tlbiwgb3IgaWYgdGhlcmUgaXNuJ3Qgb25lIChhdCB0aGVcbiAgICogYmVnaW5uaW5nLCBvciBpZiB0aGUgcHJldmlvdXMgbG9va2FoZWFkIHRva2VuIHdhcyBjb25zdW1lKClkKSxcbiAgICogZmV0Y2ggdGhlIG5leHQgdG9rZW4gYXMgdGhlIG5ldyBsb29rYWhlYWQgdG9rZW4gYW5kIHJldHVybiBpdC5cbiAgICovXG5cblxuICBmZXRjaCgpIHtcbiAgICBpZiAodGhpcy5uZXh0VG9rZW4gPT0gbnVsbCkge1xuICAgICAgdGhpcy5uZXh0VG9rZW4gPSB0aGlzLmd1bGxldC5leHBhbmROZXh0VG9rZW4oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5uZXh0VG9rZW47XG4gIH1cbiAgLyoqXG4gICAqIFN3aXRjaGVzIGJldHdlZW4gXCJ0ZXh0XCIgYW5kIFwibWF0aFwiIG1vZGVzLlxuICAgKi9cblxuXG4gIHN3aXRjaE1vZGUobmV3TW9kZSkge1xuICAgIHRoaXMubW9kZSA9IG5ld01vZGU7XG4gICAgdGhpcy5ndWxsZXQuc3dpdGNoTW9kZShuZXdNb2RlKTtcbiAgfVxuICAvKipcbiAgICogTWFpbiBwYXJzaW5nIGZ1bmN0aW9uLCB3aGljaCBwYXJzZXMgYW4gZW50aXJlIGlucHV0LlxuICAgKi9cblxuXG4gIHBhcnNlKCkge1xuICAgIGlmICghdGhpcy5zZXR0aW5ncy5nbG9iYWxHcm91cCkge1xuICAgICAgLy8gQ3JlYXRlIGEgZ3JvdXAgbmFtZXNwYWNlIGZvciB0aGUgbWF0aCBleHByZXNzaW9uLlxuICAgICAgLy8gKExhVGVYIGNyZWF0ZXMgYSBuZXcgZ3JvdXAgZm9yIGV2ZXJ5ICQuLi4kLCAkJC4uLiQkLCBcXFsuLi5cXF0uKVxuICAgICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICAgIH0gLy8gVXNlIG9sZCBcXGNvbG9yIGJlaGF2aW9yIChzYW1lIGFzIExhVGVYJ3MgXFx0ZXh0Y29sb3IpIGlmIHJlcXVlc3RlZC5cbiAgICAvLyBXZSBkbyB0aGlzIHdpdGhpbiB0aGUgZ3JvdXAgZm9yIHRoZSBtYXRoIGV4cHJlc3Npb24sIHNvIGl0IGRvZXNuJ3RcbiAgICAvLyBwb2xsdXRlIHNldHRpbmdzLm1hY3Jvcy5cblxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuY29sb3JJc1RleHRDb2xvcikge1xuICAgICAgdGhpcy5ndWxsZXQubWFjcm9zLnNldChcIlxcXFxjb2xvclwiLCBcIlxcXFx0ZXh0Y29sb3JcIik7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byBwYXJzZSB0aGUgaW5wdXRcbiAgICAgIHZhciBwYXJzZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKGZhbHNlKTsgLy8gSWYgd2Ugc3VjY2VlZGVkLCBtYWtlIHN1cmUgdGhlcmUncyBhbiBFT0YgYXQgdGhlIGVuZFxuXG4gICAgICB0aGlzLmV4cGVjdChcIkVPRlwiKTsgLy8gRW5kIHRoZSBncm91cCBuYW1lc3BhY2UgZm9yIHRoZSBleHByZXNzaW9uXG5cbiAgICAgIGlmICghdGhpcy5zZXR0aW5ncy5nbG9iYWxHcm91cCkge1xuICAgICAgICB0aGlzLmd1bGxldC5lbmRHcm91cCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2U7IC8vIENsb3NlIGFueSBsZWZ0b3ZlciBncm91cHMgaW4gY2FzZSBvZiBhIHBhcnNlIGVycm9yLlxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmd1bGxldC5lbmRHcm91cHMoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEZ1bGx5IHBhcnNlIGEgc2VwYXJhdGUgc2VxdWVuY2Ugb2YgdG9rZW5zIGFzIGEgc2VwYXJhdGUgam9iLlxuICAgKiBUb2tlbnMgc2hvdWxkIGJlIHNwZWNpZmllZCBpbiByZXZlcnNlIG9yZGVyLCBhcyBpbiBhIE1hY3JvRGVmaW5pdGlvbi5cbiAgICovXG5cblxuICBzdWJwYXJzZSh0b2tlbnMpIHtcbiAgICAvLyBTYXZlIHRoZSBuZXh0IHRva2VuIGZyb20gdGhlIGN1cnJlbnQgam9iLlxuICAgIHZhciBvbGRUb2tlbiA9IHRoaXMubmV4dFRva2VuO1xuICAgIHRoaXMuY29uc3VtZSgpOyAvLyBSdW4gdGhlIG5ldyBqb2IsIHRlcm1pbmF0aW5nIGl0IHdpdGggYW4gZXhjZXNzICd9J1xuXG4gICAgdGhpcy5ndWxsZXQucHVzaFRva2VuKG5ldyBUb2tlbihcIn1cIikpO1xuICAgIHRoaXMuZ3VsbGV0LnB1c2hUb2tlbnModG9rZW5zKTtcbiAgICB2YXIgcGFyc2UgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihmYWxzZSk7XG4gICAgdGhpcy5leHBlY3QoXCJ9XCIpOyAvLyBSZXN0b3JlIHRoZSBuZXh0IHRva2VuIGZyb20gdGhlIGN1cnJlbnQgam9iLlxuXG4gICAgdGhpcy5uZXh0VG9rZW4gPSBvbGRUb2tlbjtcbiAgICByZXR1cm4gcGFyc2U7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGFuIFwiZXhwcmVzc2lvblwiLCB3aGljaCBpcyBhIGxpc3Qgb2YgYXRvbXMuXG4gICAqXG4gICAqIGBicmVha09uSW5maXhgOiBTaG91bGQgdGhlIHBhcnNpbmcgc3RvcCB3aGVuIHdlIGhpdCBpbmZpeCBub2Rlcz8gVGhpc1xuICAgKiAgICAgICAgICAgICAgICAgaGFwcGVucyB3aGVuIGZ1bmN0aW9ucyBoYXZlIGhpZ2hlciBwcmVjZWRlbmNlIGhhbiBpbmZpeFxuICAgKiAgICAgICAgICAgICAgICAgbm9kZXMgaW4gaW1wbGljaXQgcGFyc2VzLlxuICAgKlxuICAgKiBgYnJlYWtPblRva2VuVGV4dGA6IFRoZSB0ZXh0IG9mIHRoZSB0b2tlbiB0aGF0IHRoZSBleHByZXNzaW9uIHNob3VsZCBlbmRcbiAgICogICAgICAgICAgICAgICAgICAgICB3aXRoLCBvciBgbnVsbGAgaWYgc29tZXRoaW5nIGVsc2Ugc2hvdWxkIGVuZCB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uLlxuICAgKi9cbiAgcGFyc2VFeHByZXNzaW9uKGJyZWFrT25JbmZpeCwgYnJlYWtPblRva2VuVGV4dCkge1xuICAgIHZhciBib2R5ID0gW107IC8vIEtlZXAgYWRkaW5nIGF0b21zIHRvIHRoZSBib2R5IHVudGlsIHdlIGNhbid0IHBhcnNlIGFueSBtb3JlIGF0b21zIChlaXRoZXJcbiAgICAvLyB3ZSByZWFjaGVkIHRoZSBlbmQsIGEgfSwgb3IgYSBcXHJpZ2h0KVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIElnbm9yZSBzcGFjZXMgaW4gbWF0aCBtb2RlXG4gICAgICBpZiAodGhpcy5tb2RlID09PSBcIm1hdGhcIikge1xuICAgICAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxleCA9IHRoaXMuZmV0Y2goKTtcblxuICAgICAgaWYgKFBhcnNlci5lbmRPZkV4cHJlc3Npb24uaW5kZXhPZihsZXgudGV4dCkgIT09IC0xKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnJlYWtPblRva2VuVGV4dCAmJiBsZXgudGV4dCA9PT0gYnJlYWtPblRva2VuVGV4dCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGJyZWFrT25JbmZpeCAmJiBmdW5jdGlvbnNbbGV4LnRleHRdICYmIGZ1bmN0aW9uc1tsZXgudGV4dF0uaW5maXgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZhciBhdG9tID0gdGhpcy5wYXJzZUF0b20oYnJlYWtPblRva2VuVGV4dCk7XG5cbiAgICAgIGlmICghYXRvbSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAoYXRvbS50eXBlID09PSBcImludGVybmFsXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGJvZHkucHVzaChhdG9tKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb2RlID09PSBcInRleHRcIikge1xuICAgICAgdGhpcy5mb3JtTGlnYXR1cmVzKGJvZHkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmhhbmRsZUluZml4Tm9kZXMoYm9keSk7XG4gIH1cbiAgLyoqXG4gICAqIFJld3JpdGVzIGluZml4IG9wZXJhdG9ycyBzdWNoIGFzIFxcb3ZlciB3aXRoIGNvcnJlc3BvbmRpbmcgY29tbWFuZHMgc3VjaFxuICAgKiBhcyBcXGZyYWMuXG4gICAqXG4gICAqIFRoZXJlIGNhbiBvbmx5IGJlIG9uZSBpbmZpeCBvcGVyYXRvciBwZXIgZ3JvdXAuICBJZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmVcbiAgICogdGhlbiB0aGUgZXhwcmVzc2lvbiBpcyBhbWJpZ3VvdXMuICBUaGlzIGNhbiBiZSByZXNvbHZlZCBieSBhZGRpbmcge30uXG4gICAqL1xuXG5cbiAgaGFuZGxlSW5maXhOb2Rlcyhib2R5KSB7XG4gICAgdmFyIG92ZXJJbmRleCA9IC0xO1xuICAgIHZhciBmdW5jTmFtZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9keS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJvZHlbaV0udHlwZSA9PT0gXCJpbmZpeFwiKSB7XG4gICAgICAgIGlmIChvdmVySW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJvbmx5IG9uZSBpbmZpeCBvcGVyYXRvciBwZXIgZ3JvdXBcIiwgYm9keVtpXS50b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICBvdmVySW5kZXggPSBpO1xuICAgICAgICBmdW5jTmFtZSA9IGJvZHlbaV0ucmVwbGFjZVdpdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG92ZXJJbmRleCAhPT0gLTEgJiYgZnVuY05hbWUpIHtcbiAgICAgIHZhciBudW1lck5vZGU7XG4gICAgICB2YXIgZGVub21Ob2RlO1xuICAgICAgdmFyIG51bWVyQm9keSA9IGJvZHkuc2xpY2UoMCwgb3ZlckluZGV4KTtcbiAgICAgIHZhciBkZW5vbUJvZHkgPSBib2R5LnNsaWNlKG92ZXJJbmRleCArIDEpO1xuXG4gICAgICBpZiAobnVtZXJCb2R5Lmxlbmd0aCA9PT0gMSAmJiBudW1lckJvZHlbMF0udHlwZSA9PT0gXCJvcmRncm91cFwiKSB7XG4gICAgICAgIG51bWVyTm9kZSA9IG51bWVyQm9keVswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG51bWVyTm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGJvZHk6IG51bWVyQm9keVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVub21Cb2R5Lmxlbmd0aCA9PT0gMSAmJiBkZW5vbUJvZHlbMF0udHlwZSA9PT0gXCJvcmRncm91cFwiKSB7XG4gICAgICAgIGRlbm9tTm9kZSA9IGRlbm9tQm9keVswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbm9tTm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGJvZHk6IGRlbm9tQm9keVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgbm9kZTtcblxuICAgICAgaWYgKGZ1bmNOYW1lID09PSBcIlxcXFxcXFxcYWJvdmVmcmFjXCIpIHtcbiAgICAgICAgbm9kZSA9IHRoaXMuY2FsbEZ1bmN0aW9uKGZ1bmNOYW1lLCBbbnVtZXJOb2RlLCBib2R5W292ZXJJbmRleF0sIGRlbm9tTm9kZV0sIFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUgPSB0aGlzLmNhbGxGdW5jdGlvbihmdW5jTmFtZSwgW251bWVyTm9kZSwgZGVub21Ob2RlXSwgW10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW25vZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYm9keTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHN1YnNjcmlwdCBvciBzdXBlcnNjcmlwdCB3aXRoIG5pY2UgZXJyb3JzLlxuICAgKi9cblxuXG4gIGhhbmRsZVN1cFN1YnNjcmlwdChuYW1lIC8vIEZvciBlcnJvciByZXBvcnRpbmcuXG4gICkge1xuICAgIHZhciBzeW1ib2xUb2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICB2YXIgc3ltYm9sID0gc3ltYm9sVG9rZW4udGV4dDtcbiAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTsgLy8gaWdub3JlIHNwYWNlcyBiZWZvcmUgc3VwL3N1YnNjcmlwdCBhcmd1bWVudFxuXG4gICAgdmFyIGdyb3VwID0gdGhpcy5wYXJzZUdyb3VwKG5hbWUpO1xuXG4gICAgaWYgKCFncm91cCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCBncm91cCBhZnRlciAnXCIgKyBzeW1ib2wgKyBcIidcIiwgc3ltYm9sVG9rZW4pO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHR1YWwgaW5wdXQgb2YgYW4gdW5zdXBwb3J0ZWQgY29tbWFuZCBpbnRvIGEgdGV4dCBub2RlXG4gICAqIGNvbnRhaW5lZCB3aXRoaW4gYSBjb2xvciBub2RlIHdob3NlIGNvbG9yIGlzIGRldGVybWluZWQgYnkgZXJyb3JDb2xvclxuICAgKi9cblxuXG4gIGZvcm1hdFVuc3VwcG9ydGVkQ21kKHRleHQpIHtcbiAgICB2YXIgdGV4dG9yZEFycmF5ID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRleHRvcmRBcnJheS5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiB0ZXh0W2ldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgdGV4dE5vZGUgPSB7XG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGJvZHk6IHRleHRvcmRBcnJheVxuICAgIH07XG4gICAgdmFyIGNvbG9yTm9kZSA9IHtcbiAgICAgIHR5cGU6IFwiY29sb3JcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNvbG9yOiB0aGlzLnNldHRpbmdzLmVycm9yQ29sb3IsXG4gICAgICBib2R5OiBbdGV4dE5vZGVdXG4gICAgfTtcbiAgICByZXR1cm4gY29sb3JOb2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYSBncm91cCB3aXRoIG9wdGlvbmFsIHN1cGVyL3N1YnNjcmlwdHMuXG4gICAqL1xuXG5cbiAgcGFyc2VBdG9tKGJyZWFrT25Ub2tlblRleHQpIHtcbiAgICAvLyBUaGUgYm9keSBvZiBhbiBhdG9tIGlzIGFuIGltcGxpY2l0IGdyb3VwLCBzbyB0aGF0IHRoaW5ncyBsaWtlXG4gICAgLy8gXFxsZWZ0KHhcXHJpZ2h0KV4yIHdvcmsgY29ycmVjdGx5LlxuICAgIHZhciBiYXNlID0gdGhpcy5wYXJzZUdyb3VwKFwiYXRvbVwiLCBicmVha09uVG9rZW5UZXh0KTsgLy8gSW4gdGV4dCBtb2RlLCB3ZSBkb24ndCBoYXZlIHN1cGVyc2NyaXB0cyBvciBzdWJzY3JpcHRzXG5cbiAgICBpZiAodGhpcy5tb2RlID09PSBcInRleHRcIikge1xuICAgICAgcmV0dXJuIGJhc2U7XG4gICAgfSAvLyBOb3RlIHRoYXQgYmFzZSBtYXkgYmUgZW1wdHkgKGkuZS4gbnVsbCkgYXQgdGhpcyBwb2ludC5cblxuXG4gICAgdmFyIHN1cGVyc2NyaXB0O1xuICAgIHZhciBzdWJzY3JpcHQ7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gR3VhcmFudGVlZCBpbiBtYXRoIG1vZGUsIHNvIGVhdCBhbnkgc3BhY2VzIGZpcnN0LlxuICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7IC8vIExleCB0aGUgZmlyc3QgdG9rZW5cblxuICAgICAgdmFyIGxleCA9IHRoaXMuZmV0Y2goKTtcblxuICAgICAgaWYgKGxleC50ZXh0ID09PSBcIlxcXFxsaW1pdHNcIiB8fCBsZXgudGV4dCA9PT0gXCJcXFxcbm9saW1pdHNcIikge1xuICAgICAgICAvLyBXZSBnb3QgYSBsaW1pdCBjb250cm9sXG4gICAgICAgIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcFwiKSB7XG4gICAgICAgICAgdmFyIGxpbWl0cyA9IGxleC50ZXh0ID09PSBcIlxcXFxsaW1pdHNcIjtcbiAgICAgICAgICBiYXNlLmxpbWl0cyA9IGxpbWl0cztcbiAgICAgICAgICBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoYmFzZSAmJiBiYXNlLnR5cGUgPT09IFwib3BlcmF0b3JuYW1lXCIpIHtcbiAgICAgICAgICBpZiAoYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpIHtcbiAgICAgICAgICAgIGJhc2UubGltaXRzID0gbGV4LnRleHQgPT09IFwiXFxcXGxpbWl0c1wiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkxpbWl0IGNvbnRyb2xzIG11c3QgZm9sbG93IGEgbWF0aCBvcGVyYXRvclwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICB9IGVsc2UgaWYgKGxleC50ZXh0ID09PSBcIl5cIikge1xuICAgICAgICAvLyBXZSBnb3QgYSBzdXBlcnNjcmlwdCBzdGFydFxuICAgICAgICBpZiAoc3VwZXJzY3JpcHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkRvdWJsZSBzdXBlcnNjcmlwdFwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXJzY3JpcHQgPSB0aGlzLmhhbmRsZVN1cFN1YnNjcmlwdChcInN1cGVyc2NyaXB0XCIpO1xuICAgICAgfSBlbHNlIGlmIChsZXgudGV4dCA9PT0gXCJfXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgc3Vic2NyaXB0IHN0YXJ0XG4gICAgICAgIGlmIChzdWJzY3JpcHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkRvdWJsZSBzdWJzY3JpcHRcIiwgbGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnNjcmlwdCA9IHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KFwic3Vic2NyaXB0XCIpO1xuICAgICAgfSBlbHNlIGlmIChsZXgudGV4dCA9PT0gXCInXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgcHJpbWVcbiAgICAgICAgaWYgKHN1cGVyc2NyaXB0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJEb3VibGUgc3VwZXJzY3JpcHRcIiwgbGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcmltZSA9IHtcbiAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgdGV4dDogXCJcXFxccHJpbWVcIlxuICAgICAgICB9OyAvLyBNYW55IHByaW1lcyBjYW4gYmUgZ3JvdXBlZCB0b2dldGhlciwgc28gd2UgaGFuZGxlIHRoaXMgaGVyZVxuXG4gICAgICAgIHZhciBwcmltZXMgPSBbcHJpbWVdO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTsgLy8gS2VlcCBsZXhpbmcgdG9rZW5zIHVudGlsIHdlIGdldCBzb21ldGhpbmcgdGhhdCdzIG5vdCBhIHByaW1lXG5cbiAgICAgICAgd2hpbGUgKHRoaXMuZmV0Y2goKS50ZXh0ID09PSBcIidcIikge1xuICAgICAgICAgIC8vIEZvciBlYWNoIG9uZSwgYWRkIGFub3RoZXIgcHJpbWUgdG8gdGhlIGxpc3RcbiAgICAgICAgICBwcmltZXMucHVzaChwcmltZSk7XG4gICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIH0gLy8gSWYgdGhlcmUncyBhIHN1cGVyc2NyaXB0IGZvbGxvd2luZyB0aGUgcHJpbWVzLCBjb21iaW5lIHRoYXRcbiAgICAgICAgLy8gc3VwZXJzY3JpcHQgaW4gd2l0aCB0aGUgcHJpbWVzLlxuXG5cbiAgICAgICAgaWYgKHRoaXMuZmV0Y2goKS50ZXh0ID09PSBcIl5cIikge1xuICAgICAgICAgIHByaW1lcy5wdXNoKHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KFwic3VwZXJzY3JpcHRcIikpO1xuICAgICAgICB9IC8vIFB1dCBldmVyeXRoaW5nIGludG8gYW4gb3JkZ3JvdXAgYXMgdGhlIHN1cGVyc2NyaXB0XG5cblxuICAgICAgICBzdXBlcnNjcmlwdCA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGJvZHk6IHByaW1lc1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh1U3Vic0FuZFN1cHNbbGV4LnRleHRdKSB7XG4gICAgICAgIC8vIEEgVW5pY29kZSBzdWJzY3JpcHQgb3Igc3VwZXJzY3JpcHQgY2hhcmFjdGVyLlxuICAgICAgICAvLyBXZSB0cmVhdCB0aGVzZSBzaW1pbGFybHkgdG8gdGhlIHVuaWNvZGUtbWF0aCBwYWNrYWdlLlxuICAgICAgICAvLyBTbyB3ZSByZW5kZXIgYSBzdHJpbmcgb2YgVW5pY29kZSAoc3VifHN1cGVyKXNjcmlwdHMgdGhlXG4gICAgICAgIC8vIHNhbWUgYXMgYSAoc3VifHN1cGVyKXNjcmlwdCBvZiByZWd1bGFyIGNoYXJhY3RlcnMuXG4gICAgICAgIHZhciBzdHIgPSB1U3Vic0FuZFN1cHNbbGV4LnRleHRdO1xuICAgICAgICB2YXIgaXNTdWIgPSB1bmljb2RlU3ViUmVnRXgudGVzdChsZXgudGV4dCk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpOyAvLyBDb250aW51ZSBmZXRjaGluZyB0b2tlbnMgdG8gZmlsbCBvdXQgdGhlIHN0cmluZy5cblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMuZmV0Y2goKS50ZXh0O1xuXG4gICAgICAgICAgaWYgKCF1U3Vic0FuZFN1cHNbdG9rZW5dKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodW5pY29kZVN1YlJlZ0V4LnRlc3QodG9rZW4pICE9PSBpc1N1Yikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgICAgc3RyICs9IHVTdWJzQW5kU3Vwc1t0b2tlbl07XG4gICAgICAgIH0gLy8gTm93IGNyZWF0ZSBhIChzdWJ8c3VwZXIpc2NyaXB0LlxuXG5cbiAgICAgICAgdmFyIGJvZHkgPSBuZXcgUGFyc2VyKHN0ciwgdGhpcy5zZXR0aW5ncykucGFyc2UoKTtcblxuICAgICAgICBpZiAoaXNTdWIpIHtcbiAgICAgICAgICBzdWJzY3JpcHQgPSB7XG4gICAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgICBtb2RlOiBcIm1hdGhcIixcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN1cGVyc2NyaXB0ID0ge1xuICAgICAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICAgICAgbW9kZTogXCJtYXRoXCIsXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgaXQgd2Fzbid0IF4sIF8sIG9yICcsIHN0b3AgcGFyc2luZyBzdXBlci9zdWJzY3JpcHRzXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gLy8gQmFzZSBtdXN0IGJlIHNldCBpZiBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHQgYXJlIHNldCBwZXIgbG9naWMgYWJvdmUsXG4gICAgLy8gYnV0IG5lZWQgdG8gY2hlY2sgaGVyZSBmb3IgdHlwZSBjaGVjayB0byBwYXNzLlxuXG5cbiAgICBpZiAoc3VwZXJzY3JpcHQgfHwgc3Vic2NyaXB0KSB7XG4gICAgICAvLyBJZiB3ZSBnb3QgZWl0aGVyIGEgc3VwZXJzY3JpcHQgb3Igc3Vic2NyaXB0LCBjcmVhdGUgYSBzdXBzdWJcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwic3Vwc3ViXCIsXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgYmFzZTogYmFzZSxcbiAgICAgICAgc3VwOiBzdXBlcnNjcmlwdCxcbiAgICAgICAgc3ViOiBzdWJzY3JpcHRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4gdGhlIG9yaWdpbmFsIGJvZHlcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGFuIGVudGlyZSBmdW5jdGlvbiwgaW5jbHVkaW5nIGl0cyBiYXNlIGFuZCBhbGwgb2YgaXRzIGFyZ3VtZW50cy5cbiAgICovXG5cblxuICBwYXJzZUZ1bmN0aW9uKGJyZWFrT25Ub2tlblRleHQsIG5hbWUgLy8gRm9yIGRldGVybWluaW5nIGl0cyBjb250ZXh0XG4gICkge1xuICAgIHZhciB0b2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICB2YXIgZnVuYyA9IHRva2VuLnRleHQ7XG4gICAgdmFyIGZ1bmNEYXRhID0gZnVuY3Rpb25zW2Z1bmNdO1xuXG4gICAgaWYgKCFmdW5jRGF0YSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIGNvbnN1bWUgY29tbWFuZCB0b2tlblxuXG4gICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gXCJhdG9tXCIgJiYgIWZ1bmNEYXRhLmFsbG93ZWRJbkFyZ3VtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkdvdCBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIHdpdGggbm8gYXJndW1lbnRzXCIgKyAobmFtZSA/IFwiIGFzIFwiICsgbmFtZSA6IFwiXCIpLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiICYmICFmdW5jRGF0YS5hbGxvd2VkSW5UZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkNhbid0IHVzZSBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIGluIHRleHQgbW9kZVwiLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IFwibWF0aFwiICYmIGZ1bmNEYXRhLmFsbG93ZWRJbk1hdGggPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkNhbid0IHVzZSBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIGluIG1hdGggbW9kZVwiLCB0b2tlbik7XG4gICAgfVxuXG4gICAgdmFyIHtcbiAgICAgIGFyZ3MsXG4gICAgICBvcHRBcmdzXG4gICAgfSA9IHRoaXMucGFyc2VBcmd1bWVudHMoZnVuYywgZnVuY0RhdGEpO1xuICAgIHJldHVybiB0aGlzLmNhbGxGdW5jdGlvbihmdW5jLCBhcmdzLCBvcHRBcmdzLCB0b2tlbiwgYnJlYWtPblRva2VuVGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgYSBmdW5jdGlvbiBoYW5kbGVyIHdpdGggYSBzdWl0YWJsZSBjb250ZXh0IGFuZCBhcmd1bWVudHMuXG4gICAqL1xuXG5cbiAgY2FsbEZ1bmN0aW9uKG5hbWUsIGFyZ3MsIG9wdEFyZ3MsIHRva2VuLCBicmVha09uVG9rZW5UZXh0KSB7XG4gICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICBmdW5jTmFtZTogbmFtZSxcbiAgICAgIHBhcnNlcjogdGhpcyxcbiAgICAgIHRva2VuLFxuICAgICAgYnJlYWtPblRva2VuVGV4dFxuICAgIH07XG4gICAgdmFyIGZ1bmMgPSBmdW5jdGlvbnNbbmFtZV07XG5cbiAgICBpZiAoZnVuYyAmJiBmdW5jLmhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBmdW5jLmhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTm8gZnVuY3Rpb24gaGFuZGxlciBmb3IgXCIgKyBuYW1lKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgYXJndW1lbnRzIG9mIGEgZnVuY3Rpb24gb3IgZW52aXJvbm1lbnRcbiAgICovXG5cblxuICBwYXJzZUFyZ3VtZW50cyhmdW5jLCAvLyBTaG91bGQgbG9vayBsaWtlIFwiXFxuYW1lXCIgb3IgXCJcXGJlZ2lue25hbWV9XCIuXG4gIGZ1bmNEYXRhKSB7XG4gICAgdmFyIHRvdGFsQXJncyA9IGZ1bmNEYXRhLm51bUFyZ3MgKyBmdW5jRGF0YS5udW1PcHRpb25hbEFyZ3M7XG5cbiAgICBpZiAodG90YWxBcmdzID09PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcmdzOiBbXSxcbiAgICAgICAgb3B0QXJnczogW11cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgb3B0QXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEFyZ3M7IGkrKykge1xuICAgICAgdmFyIGFyZ1R5cGUgPSBmdW5jRGF0YS5hcmdUeXBlcyAmJiBmdW5jRGF0YS5hcmdUeXBlc1tpXTtcbiAgICAgIHZhciBpc09wdGlvbmFsID0gaSA8IGZ1bmNEYXRhLm51bU9wdGlvbmFsQXJncztcblxuICAgICAgaWYgKGZ1bmNEYXRhLnByaW1pdGl2ZSAmJiBhcmdUeXBlID09IG51bGwgfHwgLy8gXFxzcXJ0IGV4cGFuZHMgaW50byBwcmltaXRpdmUgaWYgb3B0aW9uYWwgYXJndW1lbnQgZG9lc24ndCBleGlzdFxuICAgICAgZnVuY0RhdGEudHlwZSA9PT0gXCJzcXJ0XCIgJiYgaSA9PT0gMSAmJiBvcHRBcmdzWzBdID09IG51bGwpIHtcbiAgICAgICAgYXJnVHlwZSA9IFwicHJpbWl0aXZlXCI7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcmcgPSB0aGlzLnBhcnNlR3JvdXBPZlR5cGUoXCJhcmd1bWVudCB0byAnXCIgKyBmdW5jICsgXCInXCIsIGFyZ1R5cGUsIGlzT3B0aW9uYWwpO1xuXG4gICAgICBpZiAoaXNPcHRpb25hbCkge1xuICAgICAgICBvcHRBcmdzLnB1c2goYXJnKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJnICE9IG51bGwpIHtcbiAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzaG91bGQgYmUgdW5yZWFjaGFibGVcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJOdWxsIGFyZ3VtZW50LCBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBidWdcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFyZ3MsXG4gICAgICBvcHRBcmdzXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgZ3JvdXAgd2hlbiB0aGUgbW9kZSBpcyBjaGFuZ2luZy5cbiAgICovXG5cblxuICBwYXJzZUdyb3VwT2ZUeXBlKG5hbWUsIHR5cGUsIG9wdGlvbmFsKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiY29sb3JcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VDb2xvckdyb3VwKG9wdGlvbmFsKTtcblxuICAgICAgY2FzZSBcInNpemVcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VTaXplR3JvdXAob3B0aW9uYWwpO1xuXG4gICAgICBjYXNlIFwidXJsXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVXJsR3JvdXAob3B0aW9uYWwpO1xuXG4gICAgICBjYXNlIFwibWF0aFwiOlxuICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VBcmd1bWVudEdyb3VwKG9wdGlvbmFsLCB0eXBlKTtcblxuICAgICAgY2FzZSBcImhib3hcIjpcbiAgICAgICAge1xuICAgICAgICAgIC8vIGhib3ggYXJndW1lbnQgdHlwZSB3cmFwcyB0aGUgYXJndW1lbnQgaW4gdGhlIGVxdWl2YWxlbnQgb2ZcbiAgICAgICAgICAvLyBcXGhib3gsIHdoaWNoIGlzIGxpa2UgXFx0ZXh0IGJ1dCBzd2l0Y2hpbmcgdG8gXFx0ZXh0c3R5bGUgc2l6ZS5cbiAgICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLnBhcnNlQXJndW1lbnRHcm91cChvcHRpb25hbCwgXCJ0ZXh0XCIpO1xuICAgICAgICAgIHJldHVybiBncm91cCAhPSBudWxsID8ge1xuICAgICAgICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICAgICAgICBtb2RlOiBncm91cC5tb2RlLFxuICAgICAgICAgICAgYm9keTogW2dyb3VwXSxcbiAgICAgICAgICAgIHN0eWxlOiBcInRleHRcIiAvLyBzaW11bGF0ZSBcXHRleHRzdHlsZVxuXG4gICAgICAgICAgfSA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5wYXJzZVN0cmluZ0dyb3VwKFwicmF3XCIsIG9wdGlvbmFsKTtcbiAgICAgICAgICByZXR1cm4gdG9rZW4gIT0gbnVsbCA/IHtcbiAgICAgICAgICAgIHR5cGU6IFwicmF3XCIsXG4gICAgICAgICAgICBtb2RlOiBcInRleHRcIixcbiAgICAgICAgICAgIHN0cmluZzogdG9rZW4udGV4dFxuICAgICAgICAgIH0gOiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJwcmltaXRpdmVcIjpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChvcHRpb25hbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJBIHByaW1pdGl2ZSBhcmd1bWVudCBjYW5ub3QgYmUgb3B0aW9uYWxcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9ncm91cCA9IHRoaXMucGFyc2VHcm91cChuYW1lKTtcblxuICAgICAgICAgIGlmIChfZ3JvdXAgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCBncm91cCBhcyBcIiArIG5hbWUsIHRoaXMuZmV0Y2goKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF9ncm91cDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwib3JpZ2luYWxcIjpcbiAgICAgIGNhc2UgbnVsbDpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUFyZ3VtZW50R3JvdXAob3B0aW9uYWwpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVua25vd24gZ3JvdXAgdHlwZSBhcyBcIiArIG5hbWUsIHRoaXMuZmV0Y2goKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEaXNjYXJkIGFueSBzcGFjZSB0b2tlbnMsIGZldGNoaW5nIHRoZSBuZXh0IG5vbi1zcGFjZSB0b2tlbi5cbiAgICovXG5cblxuICBjb25zdW1lU3BhY2VzKCkge1xuICAgIHdoaWxlICh0aGlzLmZldGNoKCkudGV4dCA9PT0gXCIgXCIpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgZ3JvdXAsIGVzc2VudGlhbGx5IHJldHVybmluZyB0aGUgc3RyaW5nIGZvcm1lZCBieSB0aGVcbiAgICogYnJhY2UtZW5jbG9zZWQgdG9rZW5zIHBsdXMgc29tZSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAgICovXG5cblxuICBwYXJzZVN0cmluZ0dyb3VwKG1vZGVOYW1lLCAvLyBVc2VkIHRvIGRlc2NyaWJlIHRoZSBtb2RlIGluIGVycm9yIG1lc3NhZ2VzLlxuICBvcHRpb25hbCkge1xuICAgIHZhciBhcmdUb2tlbiA9IHRoaXMuZ3VsbGV0LnNjYW5Bcmd1bWVudChvcHRpb25hbCk7XG5cbiAgICBpZiAoYXJnVG9rZW4gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgdmFyIG5leHRUb2tlbjtcblxuICAgIHdoaWxlICgobmV4dFRva2VuID0gdGhpcy5mZXRjaCgpKS50ZXh0ICE9PSBcIkVPRlwiKSB7XG4gICAgICBzdHIgKz0gbmV4dFRva2VuLnRleHQ7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnN1bWUoKTsgLy8gY29uc3VtZSB0aGUgZW5kIG9mIHRoZSBhcmd1bWVudFxuXG4gICAgYXJnVG9rZW4udGV4dCA9IHN0cjtcbiAgICByZXR1cm4gYXJnVG9rZW47XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHJlZ2V4LWRlbGltaXRlZCBncm91cDogdGhlIGxhcmdlc3Qgc2VxdWVuY2Ugb2YgdG9rZW5zXG4gICAqIHdob3NlIGNvbmNhdGVuYXRlZCBzdHJpbmdzIG1hdGNoIGByZWdleGAuIFJldHVybnMgdGhlIHN0cmluZ1xuICAgKiBmb3JtZWQgYnkgdGhlIHRva2VucyBwbHVzIHNvbWUgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gICAqL1xuXG5cbiAgcGFyc2VSZWdleEdyb3VwKHJlZ2V4LCBtb2RlTmFtZSAvLyBVc2VkIHRvIGRlc2NyaWJlIHRoZSBtb2RlIGluIGVycm9yIG1lc3NhZ2VzLlxuICApIHtcbiAgICB2YXIgZmlyc3RUb2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICB2YXIgbGFzdFRva2VuID0gZmlyc3RUb2tlbjtcbiAgICB2YXIgc3RyID0gXCJcIjtcbiAgICB2YXIgbmV4dFRva2VuO1xuXG4gICAgd2hpbGUgKChuZXh0VG9rZW4gPSB0aGlzLmZldGNoKCkpLnRleHQgIT09IFwiRU9GXCIgJiYgcmVnZXgudGVzdChzdHIgKyBuZXh0VG9rZW4udGV4dCkpIHtcbiAgICAgIGxhc3RUb2tlbiA9IG5leHRUb2tlbjtcbiAgICAgIHN0ciArPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCBcIiArIG1vZGVOYW1lICsgXCI6ICdcIiArIGZpcnN0VG9rZW4udGV4dCArIFwiJ1wiLCBmaXJzdFRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlyc3RUb2tlbi5yYW5nZShsYXN0VG9rZW4sIHN0cik7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIGNvbG9yIGRlc2NyaXB0aW9uLlxuICAgKi9cblxuXG4gIHBhcnNlQ29sb3JHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXMgPSB0aGlzLnBhcnNlU3RyaW5nR3JvdXAoXCJjb2xvclwiLCBvcHRpb25hbCk7XG5cbiAgICBpZiAocmVzID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBtYXRjaCA9IC9eKCNbYS1mMC05XXszfXwjP1thLWYwLTldezZ9fFthLXpdKykkL2kuZXhlYyhyZXMudGV4dCk7XG5cbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgY29sb3I6ICdcIiArIHJlcy50ZXh0ICsgXCInXCIsIHJlcyk7XG4gICAgfVxuXG4gICAgdmFyIGNvbG9yID0gbWF0Y2hbMF07XG5cbiAgICBpZiAoL15bMC05YS1mXXs2fSQvaS50ZXN0KGNvbG9yKSkge1xuICAgICAgLy8gV2UgYWxsb3cgYSA2LWRpZ2l0IEhUTUwgY29sb3Igc3BlYyB3aXRob3V0IGEgbGVhZGluZyBcIiNcIi5cbiAgICAgIC8vIFRoaXMgZm9sbG93cyB0aGUgeGNvbG9yIHBhY2thZ2UncyBIVE1MIGNvbG9yIG1vZGVsLlxuICAgICAgLy8gUHJlZGVmaW5lZCBjb2xvciBuYW1lcyBhcmUgYWxsIG1pc3NlZCBieSB0aGlzIFJlZ0V4IHBhdHRlcm4uXG4gICAgICBjb2xvciA9IFwiI1wiICsgY29sb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29sb3ItdG9rZW5cIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNvbG9yXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgc2l6ZSBzcGVjaWZpY2F0aW9uLCBjb25zaXN0aW5nIG9mIG1hZ25pdHVkZSBhbmQgdW5pdC5cbiAgICovXG5cblxuICBwYXJzZVNpemVHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXM7XG4gICAgdmFyIGlzQmxhbmsgPSBmYWxzZTsgLy8gZG9uJ3QgZXhwYW5kIGJlZm9yZSBwYXJzZVN0cmluZ0dyb3VwXG5cbiAgICB0aGlzLmd1bGxldC5jb25zdW1lU3BhY2VzKCk7XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHRoaXMuZ3VsbGV0LmZ1dHVyZSgpLnRleHQgIT09IFwie1wiKSB7XG4gICAgICByZXMgPSB0aGlzLnBhcnNlUmVnZXhHcm91cCgvXlstK10/ICooPzokfFxcZCt8XFxkK1xcLlxcZCp8XFwuXFxkKikgKlthLXpdezAsMn0gKiQvLCBcInNpemVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInNpemVcIiwgb3B0aW9uYWwpO1xuICAgIH1cblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHJlcy50ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gQmVjYXVzZSB3ZSd2ZSB0ZXN0ZWQgZm9yIHdoYXQgaXMgIW9wdGlvbmFsLCB0aGlzIGJsb2NrIHdvbid0XG4gICAgICAvLyBhZmZlY3QgXFxrZXJuLCBcXGhzcGFjZSwgZXRjLiBJdCB3aWxsIGNhcHR1cmUgdGhlIG1hbmRhdG9yeSBhcmd1bWVudHNcbiAgICAgIC8vIHRvIFxcZ2VuZnJhYyBhbmQgXFxhYm92ZS5cbiAgICAgIHJlcy50ZXh0ID0gXCIwcHRcIjsgLy8gRW5hYmxlIFxcYWJvdmV7fVxuXG4gICAgICBpc0JsYW5rID0gdHJ1ZTsgLy8gVGhpcyBpcyBoZXJlIHNwZWNpZmljYWxseSBmb3IgXFxnZW5mcmFjXG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gLyhbLStdPykgKihcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspICooW2Etel17Mn0pLy5leGVjKHJlcy50ZXh0KTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCBzaXplOiAnXCIgKyByZXMudGV4dCArIFwiJ1wiLCByZXMpO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0ge1xuICAgICAgbnVtYmVyOiArKG1hdGNoWzFdICsgbWF0Y2hbMl0pLFxuICAgICAgLy8gc2lnbiArIG1hZ25pdHVkZSwgY2FzdCB0byBudW1iZXJcbiAgICAgIHVuaXQ6IG1hdGNoWzNdXG4gICAgfTtcblxuICAgIGlmICghdmFsaWRVbml0KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgZGF0YS51bml0ICsgXCInXCIsIHJlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic2l6ZVwiLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICBpc0JsYW5rXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGFuIFVSTCwgY2hlY2tpbmcgZXNjYXBlZCBsZXR0ZXJzIGFuZCBhbGxvd2VkIHByb3RvY29scyxcbiAgICogYW5kIHNldHRpbmcgdGhlIGNhdGNvZGUgb2YgJSBhcyBhbiBhY3RpdmUgY2hhcmFjdGVyIChhcyBpbiBcXGh5cGVycmVmKS5cbiAgICovXG5cblxuICBwYXJzZVVybEdyb3VwKG9wdGlvbmFsKSB7XG4gICAgdGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZShcIiVcIiwgMTMpOyAvLyBhY3RpdmUgY2hhcmFjdGVyXG5cbiAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiflwiLCAxMik7IC8vIG90aGVyIGNoYXJhY3RlclxuXG4gICAgdmFyIHJlcyA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInVybFwiLCBvcHRpb25hbCk7XG4gICAgdGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZShcIiVcIiwgMTQpOyAvLyBjb21tZW50IGNoYXJhY3RlclxuXG4gICAgdGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZShcIn5cIiwgMTMpOyAvLyBhY3RpdmUgY2hhcmFjdGVyXG5cbiAgICBpZiAocmVzID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gaHlwZXJyZWYgcGFja2FnZSBhbGxvd3MgYmFja3NsYXNoZXMgYWxvbmUgaW4gaHJlZiwgYnV0IGRvZXNuJ3RcbiAgICAvLyBnZW5lcmF0ZSB2YWxpZCBsaW5rcyBpbiBzdWNoIGNhc2VzOyB3ZSBpbnRlcnByZXQgdGhpcyBhc1xuICAgIC8vIFwidW5kZWZpbmVkXCIgYmVoYXZpb3VyLCBhbmQga2VlcCB0aGVtIGFzLWlzLiBTb21lIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlcGxhY2UgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkIHNsYXNoZXMuXG5cblxuICAgIHZhciB1cmwgPSByZXMudGV4dC5yZXBsYWNlKC9cXFxcKFsjJCUmfl9ee31dKS9nLCAnJDEnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1cmxcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIHVybFxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhbiBhcmd1bWVudCB3aXRoIHRoZSBtb2RlIHNwZWNpZmllZC5cbiAgICovXG5cblxuICBwYXJzZUFyZ3VtZW50R3JvdXAob3B0aW9uYWwsIG1vZGUpIHtcbiAgICB2YXIgYXJnVG9rZW4gPSB0aGlzLmd1bGxldC5zY2FuQXJndW1lbnQob3B0aW9uYWwpO1xuXG4gICAgaWYgKGFyZ1Rva2VuID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBvdXRlck1vZGUgPSB0aGlzLm1vZGU7XG5cbiAgICBpZiAobW9kZSkge1xuICAgICAgLy8gU3dpdGNoIHRvIHNwZWNpZmllZCBtb2RlXG4gICAgICB0aGlzLnN3aXRjaE1vZGUobW9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIFwiRU9GXCIpOyAvLyBUT0RPOiBmaW5kIGFuIGFsdGVybmF0aXZlIHdheSB0byBkZW5vdGUgdGhlIGVuZFxuXG4gICAgdGhpcy5leHBlY3QoXCJFT0ZcIik7IC8vIGV4cGVjdCB0aGUgZW5kIG9mIHRoZSBhcmd1bWVudFxuXG4gICAgdGhpcy5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgbG9jOiBhcmdUb2tlbi5sb2MsXG4gICAgICBib2R5OiBleHByZXNzaW9uXG4gICAgfTtcblxuICAgIGlmIChtb2RlKSB7XG4gICAgICAvLyBTd2l0Y2ggbW9kZSBiYWNrXG4gICAgICB0aGlzLnN3aXRjaE1vZGUob3V0ZXJNb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gb3JkaW5hcnkgZ3JvdXAsIHdoaWNoIGlzIGVpdGhlciBhIHNpbmdsZSBudWNsZXVzIChsaWtlIFwieFwiKVxuICAgKiBvciBhbiBleHByZXNzaW9uIGluIGJyYWNlcyAobGlrZSBcInt4K3l9XCIpIG9yIGFuIGltcGxpY2l0IGdyb3VwLCBhIGdyb3VwXG4gICAqIHRoYXQgc3RhcnRzIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLCBhbmQgZW5kcyByaWdodCBiZWZvcmUgYSBoaWdoZXIgZXhwbGljaXRcbiAgICogZ3JvdXAgZW5kcywgb3IgYXQgRU9GLlxuICAgKi9cblxuXG4gIHBhcnNlR3JvdXAobmFtZSwgLy8gRm9yIGVycm9yIHJlcG9ydGluZy5cbiAgYnJlYWtPblRva2VuVGV4dCkge1xuICAgIHZhciBmaXJzdFRva2VuID0gdGhpcy5mZXRjaCgpO1xuICAgIHZhciB0ZXh0ID0gZmlyc3RUb2tlbi50ZXh0O1xuICAgIHZhciByZXN1bHQ7IC8vIFRyeSB0byBwYXJzZSBhbiBvcGVuIGJyYWNlIG9yIFxcYmVnaW5ncm91cFxuXG4gICAgaWYgKHRleHQgPT09IFwie1wiIHx8IHRleHQgPT09IFwiXFxcXGJlZ2luZ3JvdXBcIikge1xuICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICB2YXIgZ3JvdXBFbmQgPSB0ZXh0ID09PSBcIntcIiA/IFwifVwiIDogXCJcXFxcZW5kZ3JvdXBcIjtcbiAgICAgIHRoaXMuZ3VsbGV0LmJlZ2luR3JvdXAoKTsgLy8gSWYgd2UgZ2V0IGEgYnJhY2UsIHBhcnNlIGFuIGV4cHJlc3Npb25cblxuICAgICAgdmFyIGV4cHJlc3Npb24gPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgZ3JvdXBFbmQpO1xuICAgICAgdmFyIGxhc3RUb2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICAgIHRoaXMuZXhwZWN0KGdyb3VwRW5kKTsgLy8gQ2hlY2sgdGhhdCB3ZSBnb3QgYSBtYXRjaGluZyBjbG9zaW5nIGJyYWNlXG5cbiAgICAgIHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKGZpcnN0VG9rZW4sIGxhc3RUb2tlbiksXG4gICAgICAgIGJvZHk6IGV4cHJlc3Npb24sXG4gICAgICAgIC8vIEEgZ3JvdXAgZm9ybWVkIGJ5IFxcYmVnaW5ncm91cC4uLlxcZW5kZ3JvdXAgaXMgYSBzZW1pLXNpbXBsZSBncm91cFxuICAgICAgICAvLyB3aGljaCBkb2Vzbid0IGFmZmVjdCBzcGFjaW5nIGluIG1hdGggbW9kZSwgaS5lLiwgaXMgdHJhbnNwYXJlbnQuXG4gICAgICAgIC8vIGh0dHBzOi8vdGV4LnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xOTMwL3doZW4tc2hvdWxkLW9uZS1cbiAgICAgICAgLy8gdXNlLWJlZ2luZ3JvdXAtaW5zdGVhZC1vZi1iZ3JvdXBcbiAgICAgICAgc2VtaXNpbXBsZTogdGV4dCA9PT0gXCJcXFxcYmVnaW5ncm91cFwiIHx8IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUgZXhpc3RzIGEgZnVuY3Rpb24gd2l0aCB0aGlzIG5hbWUsIHBhcnNlIHRoZSBmdW5jdGlvbi5cbiAgICAgIC8vIE90aGVyd2lzZSwganVzdCByZXR1cm4gYSBudWNsZXVzXG4gICAgICByZXN1bHQgPSB0aGlzLnBhcnNlRnVuY3Rpb24oYnJlYWtPblRva2VuVGV4dCwgbmFtZSkgfHwgdGhpcy5wYXJzZVN5bWJvbCgpO1xuXG4gICAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgdGV4dFswXSA9PT0gXCJcXFxcXCIgJiYgIWltcGxpY2l0Q29tbWFuZHMuaGFzT3duUHJvcGVydHkodGV4dCkpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MudGhyb3dPbkVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogXCIgKyB0ZXh0LCBmaXJzdFRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZm9ybWF0VW5zdXBwb3J0ZWRDbWQodGV4dCk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIEZvcm0gbGlnYXR1cmUtbGlrZSBjb21iaW5hdGlvbnMgb2YgY2hhcmFjdGVycyBmb3IgdGV4dCBtb2RlLlxuICAgKiBUaGlzIGluY2x1ZGVzIGlucHV0cyBsaWtlIFwiLS1cIiwgXCItLS1cIiwgXCJgYFwiIGFuZCBcIicnXCIuXG4gICAqIFRoZSByZXN1bHQgd2lsbCBzaW1wbHkgcmVwbGFjZSBtdWx0aXBsZSB0ZXh0b3JkIG5vZGVzIHdpdGggYSBzaW5nbGVcbiAgICogY2hhcmFjdGVyIGluIGVhY2ggdmFsdWUgYnkgYSBzaW5nbGUgdGV4dG9yZCBub2RlIGhhdmluZyBtdWx0aXBsZVxuICAgKiBjaGFyYWN0ZXJzIGluIGl0cyB2YWx1ZS4gIFRoZSByZXByZXNlbnRhdGlvbiBpcyBzdGlsbCBBU0NJSSBzb3VyY2UuXG4gICAqIFRoZSBncm91cCB3aWxsIGJlIG1vZGlmaWVkIGluIHBsYWNlLlxuICAgKi9cblxuXG4gIGZvcm1MaWdhdHVyZXMoZ3JvdXApIHtcbiAgICB2YXIgbiA9IGdyb3VwLmxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIGEgPSBncm91cFtpXTsgLy8gJEZsb3dGaXhNZTogTm90IGV2ZXJ5IG5vZGUgdHlwZSBoYXMgYSBgdGV4dGAgcHJvcGVydHkuXG5cbiAgICAgIHZhciB2ID0gYS50ZXh0O1xuXG4gICAgICBpZiAodiA9PT0gXCItXCIgJiYgZ3JvdXBbaSArIDFdLnRleHQgPT09IFwiLVwiKSB7XG4gICAgICAgIGlmIChpICsgMSA8IG4gJiYgZ3JvdXBbaSArIDJdLnRleHQgPT09IFwiLVwiKSB7XG4gICAgICAgICAgZ3JvdXAuc3BsaWNlKGksIDMsIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKGEsIGdyb3VwW2kgKyAyXSksXG4gICAgICAgICAgICB0ZXh0OiBcIi0tLVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbiAtPSAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdyb3VwLnNwbGljZShpLCAyLCB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShhLCBncm91cFtpICsgMV0pLFxuICAgICAgICAgICAgdGV4dDogXCItLVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbiAtPSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgodiA9PT0gXCInXCIgfHwgdiA9PT0gXCJgXCIpICYmIGdyb3VwW2kgKyAxXS50ZXh0ID09PSB2KSB7XG4gICAgICAgIGdyb3VwLnNwbGljZShpLCAyLCB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShhLCBncm91cFtpICsgMV0pLFxuICAgICAgICAgIHRleHQ6IHYgKyB2XG4gICAgICAgIH0pO1xuICAgICAgICBuIC09IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHNpbmdsZSBzeW1ib2wgb3V0IG9mIHRoZSBzdHJpbmcuIEhlcmUsIHdlIGhhbmRsZSBzaW5nbGUgY2hhcmFjdGVyXG4gICAqIHN5bWJvbHMgYW5kIHNwZWNpYWwgZnVuY3Rpb25zIGxpa2UgXFx2ZXJiLlxuICAgKi9cblxuXG4gIHBhcnNlU3ltYm9sKCkge1xuICAgIHZhciBudWNsZXVzID0gdGhpcy5mZXRjaCgpO1xuICAgIHZhciB0ZXh0ID0gbnVjbGV1cy50ZXh0O1xuXG4gICAgaWYgKC9eXFxcXHZlcmJbXmEtekEtWl0vLnRlc3QodGV4dCkpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgdmFyIGFyZyA9IHRleHQuc2xpY2UoNSk7XG4gICAgICB2YXIgc3RhciA9IGFyZy5jaGFyQXQoMCkgPT09IFwiKlwiO1xuXG4gICAgICBpZiAoc3Rhcikge1xuICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMSk7XG4gICAgICB9IC8vIExleGVyJ3MgdG9rZW5SZWdleCBpcyBjb25zdHJ1Y3RlZCB0byBhbHdheXMgaGF2ZSBtYXRjaGluZ1xuICAgICAgLy8gZmlyc3QvbGFzdCBjaGFyYWN0ZXJzLlxuXG5cbiAgICAgIGlmIChhcmcubGVuZ3RoIDwgMiB8fCBhcmcuY2hhckF0KDApICE9PSBhcmcuc2xpY2UoLTEpKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXHZlcmIgYXNzZXJ0aW9uIGZhaWxlZCAtLVxcbiAgICAgICAgICAgICAgICAgICAgcGxlYXNlIHJlcG9ydCB3aGF0IGlucHV0IGNhdXNlZCB0aGlzIGJ1Z1wiKTtcbiAgICAgIH1cblxuICAgICAgYXJnID0gYXJnLnNsaWNlKDEsIC0xKTsgLy8gcmVtb3ZlIGZpcnN0IGFuZCBsYXN0IGNoYXJcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ2ZXJiXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICBib2R5OiBhcmcsXG4gICAgICAgIHN0YXJcbiAgICAgIH07XG4gICAgfSAvLyBBdCB0aGlzIHBvaW50LCB3ZSBzaG91bGQgaGF2ZSBhIHN5bWJvbCwgcG9zc2libHkgd2l0aCBhY2NlbnRzLlxuICAgIC8vIEZpcnN0IGV4cGFuZCBhbnkgYWNjZW50ZWQgYmFzZSBzeW1ib2wgYWNjb3JkaW5nIHRvIHVuaWNvZGVTeW1ib2xzLlxuXG5cbiAgICBpZiAodW5pY29kZVN5bWJvbHMuaGFzT3duUHJvcGVydHkodGV4dFswXSkgJiYgIXN5bWJvbHNbdGhpcy5tb2RlXVt0ZXh0WzBdXSkge1xuICAgICAgLy8gVGhpcyBiZWhhdmlvciBpcyBub3Qgc3RyaWN0IChYZVRlWC1jb21wYXRpYmxlKSBpbiBtYXRoIG1vZGUuXG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSBcIm1hdGhcIikge1xuICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIkFjY2VudGVkIFVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHRleHQgPSB1bmljb2RlU3ltYm9sc1t0ZXh0WzBdXSArIHRleHQuc2xpY2UoMSk7XG4gICAgfSAvLyBTdHJpcCBvZmYgYW55IGNvbWJpbmluZyBjaGFyYWN0ZXJzXG5cblxuICAgIHZhciBtYXRjaCA9IGNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya3NFbmRSZWdleC5leGVjKHRleHQpO1xuXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXgpO1xuXG4gICAgICBpZiAodGV4dCA9PT0gJ2knKSB7XG4gICAgICAgIHRleHQgPSAnXFx1MDEzMSc7IC8vIGRvdGxlc3MgaSwgaW4gbWF0aCBhbmQgdGV4dCBtb2RlXG4gICAgICB9IGVsc2UgaWYgKHRleHQgPT09ICdqJykge1xuICAgICAgICB0ZXh0ID0gJ1xcdTAyMzcnOyAvLyBkb3RsZXNzIGosIGluIG1hdGggYW5kIHRleHQgbW9kZVxuICAgICAgfVxuICAgIH0gLy8gUmVjb2duaXplIGJhc2Ugc3ltYm9sXG5cblxuICAgIHZhciBzeW1ib2w7XG5cbiAgICBpZiAoc3ltYm9sc1t0aGlzLm1vZGVdW3RleHRdKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSAnbWF0aCcgJiYgZXh0cmFMYXRpbi5pbmRleE9mKHRleHQpID49IDApIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmljb2RlVGV4dEluTWF0aE1vZGVcIiwgXCJMYXRpbi0xL1VuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBncm91cCA9IHN5bWJvbHNbdGhpcy5tb2RlXVt0ZXh0XS5ncm91cDtcbiAgICAgIHZhciBsb2MgPSBTb3VyY2VMb2NhdGlvbi5yYW5nZShudWNsZXVzKTtcbiAgICAgIHZhciBzO1xuXG4gICAgICBpZiAoQVRPTVMuaGFzT3duUHJvcGVydHkoZ3JvdXApKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgdmFyIGZhbWlseSA9IGdyb3VwO1xuICAgICAgICBzID0ge1xuICAgICAgICAgIHR5cGU6IFwiYXRvbVwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBmYW1pbHksXG4gICAgICAgICAgbG9jLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgcyA9IHtcbiAgICAgICAgICB0eXBlOiBncm91cCxcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgbG9jLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIHN5bWJvbCA9IHM7XG4gICAgfSBlbHNlIGlmICh0ZXh0LmNoYXJDb2RlQXQoMCkgPj0gMHg4MCkge1xuICAgICAgLy8gbm8gc3ltYm9sIGZvciBlLmcuIF5cbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgICBpZiAoIXN1cHBvcnRlZENvZGVwb2ludCh0ZXh0LmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmtub3duU3ltYm9sXCIsIFwiVW5yZWNvZ25pemVkIFVuaWNvZGUgY2hhcmFjdGVyIFxcXCJcIiArIHRleHRbMF0gKyBcIlxcXCJcIiArIChcIiAoXCIgKyB0ZXh0LmNoYXJDb2RlQXQoMCkgKyBcIilcIiksIG51Y2xldXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIlVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIG1hdGggbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBbGwgbm9ubWF0aGVtYXRpY2FsIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgcmVuZGVyZWQgYXMgaWYgdGhleVxuICAgICAgLy8gYXJlIGluIHRleHQgbW9kZSAod3JhcHBlZCBpbiBcXHRleHQpIGJlY2F1c2UgdGhhdCdzIHdoYXQgaXRcbiAgICAgIC8vIHRha2VzIHRvIHJlbmRlciB0aGVtIGluIExhVGVYLiAgU2V0dGluZyBgbW9kZTogdGhpcy5tb2RlYCBpc1xuICAgICAgLy8gYW5vdGhlciBuYXR1cmFsIGNob2ljZSAodGhlIHVzZXIgcmVxdWVzdGVkIG1hdGggbW9kZSksIGJ1dFxuICAgICAgLy8gdGhpcyBtYWtlcyBpdCBtb3JlIGRpZmZpY3VsdCBmb3IgZ2V0Q2hhcmFjdGVyTWV0cmljcygpIHRvXG4gICAgICAvLyBkaXN0aW5ndWlzaCBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aG91dCBtZXRyaWNzIGFuZCB0aG9zZSBmb3JcbiAgICAgIC8vIHdoaWNoIHdlIHdhbnQgdG8gc2ltdWxhdGUgdGhlIGxldHRlciBNLlxuXG5cbiAgICAgIHN5bWJvbCA9IHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKG51Y2xldXMpLFxuICAgICAgICB0ZXh0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRU9GLCBeLCBfLCB7LCB9LCBldGMuXG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIFRyYW5zZm9ybSBjb21iaW5pbmcgY2hhcmFjdGVycyBpbnRvIGFjY2VudHNcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaFswXS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYWNjZW50ID0gbWF0Y2hbMF1baV07XG5cbiAgICAgICAgaWYgKCF1bmljb2RlQWNjZW50c1thY2NlbnRdKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVbmtub3duIGFjY2VudCAnIFwiICsgYWNjZW50ICsgXCInXCIsIG51Y2xldXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbW1hbmQgPSB1bmljb2RlQWNjZW50c1thY2NlbnRdW3RoaXMubW9kZV0gfHwgdW5pY29kZUFjY2VudHNbYWNjZW50XS50ZXh0O1xuXG4gICAgICAgIGlmICghY29tbWFuZCkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiQWNjZW50IFwiICsgYWNjZW50ICsgXCIgdW5zdXBwb3J0ZWQgaW4gXCIgKyB0aGlzLm1vZGUgKyBcIiBtb2RlXCIsIG51Y2xldXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3ltYm9sID0ge1xuICAgICAgICAgIHR5cGU6IFwiYWNjZW50XCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGxvYzogU291cmNlTG9jYXRpb24ucmFuZ2UobnVjbGV1cyksXG4gICAgICAgICAgbGFiZWw6IGNvbW1hbmQsXG4gICAgICAgICAgaXNTdHJldGNoeTogZmFsc2UsXG4gICAgICAgICAgaXNTaGlmdHk6IHRydWUsXG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgIGJhc2U6IHN5bWJvbFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG5cbn1cblBhcnNlci5lbmRPZkV4cHJlc3Npb24gPSBbXCJ9XCIsIFwiXFxcXGVuZGdyb3VwXCIsIFwiXFxcXGVuZFwiLCBcIlxcXFxyaWdodFwiLCBcIiZcIl07XG5cbi8qKlxuICogUHJvdmlkZXMgYSBzaW5nbGUgZnVuY3Rpb24gZm9yIHBhcnNpbmcgYW4gZXhwcmVzc2lvbiB1c2luZyBhIFBhcnNlclxuICogVE9ETyhlbWlseSk6IFJlbW92ZSB0aGlzXG4gKi9cblxuLyoqXG4gKiBQYXJzZXMgYW4gZXhwcmVzc2lvbiB1c2luZyBhIFBhcnNlciwgdGhlbiByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LlxuICovXG52YXIgcGFyc2VUcmVlID0gZnVuY3Rpb24gcGFyc2VUcmVlKHRvUGFyc2UsIHNldHRpbmdzKSB7XG4gIGlmICghKHR5cGVvZiB0b1BhcnNlID09PSAnc3RyaW5nJyB8fCB0b1BhcnNlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0thVGVYIGNhbiBvbmx5IHBhcnNlIHN0cmluZyB0eXBlZCBleHByZXNzaW9uJyk7XG4gIH1cblxuICB2YXIgcGFyc2VyID0gbmV3IFBhcnNlcih0b1BhcnNlLCBzZXR0aW5ncyk7IC8vIEJsYW5rIG91dCBhbnkgXFxkZkB0YWcgdG8gYXZvaWQgc3B1cmlvdXMgXCJEdXBsaWNhdGUgXFx0YWdcIiBlcnJvcnNcblxuICBkZWxldGUgcGFyc2VyLmd1bGxldC5tYWNyb3MuY3VycmVudFtcIlxcXFxkZkB0YWdcIl07XG4gIHZhciB0cmVlID0gcGFyc2VyLnBhcnNlKCk7IC8vIFByZXZlbnQgYSBjb2xvciBkZWZpbml0aW9uIGZyb20gcGVyc2lzdGluZyBiZXR3ZWVuIGNhbGxzIHRvIGthdGV4LnJlbmRlcigpLlxuXG4gIGRlbGV0ZSBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50W1wiXFxcXGN1cnJlbnRAY29sb3JcIl07XG4gIGRlbGV0ZSBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50W1wiXFxcXGNvbG9yXCJdOyAvLyBJZiB0aGUgaW5wdXQgdXNlZCBcXHRhZywgaXQgd2lsbCBzZXQgdGhlIFxcZGZAdGFnIG1hY3JvIHRvIHRoZSB0YWcuXG4gIC8vIEluIHRoaXMgY2FzZSwgd2Ugc2VwYXJhdGVseSBwYXJzZSB0aGUgdGFnIGFuZCB3cmFwIHRoZSB0cmVlLlxuXG4gIGlmIChwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoXCJcXFxcZGZAdGFnXCIpKSB7XG4gICAgaWYgKCFzZXR0aW5ncy5kaXNwbGF5TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcdGFnIHdvcmtzIG9ubHkgaW4gZGlzcGxheSBlcXVhdGlvbnNcIik7XG4gICAgfVxuXG4gICAgdHJlZSA9IFt7XG4gICAgICB0eXBlOiBcInRhZ1wiLFxuICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICBib2R5OiB0cmVlLFxuICAgICAgdGFnOiBwYXJzZXIuc3VicGFyc2UoW25ldyBUb2tlbihcIlxcXFxkZkB0YWdcIildKVxuICAgIH1dO1xuICB9XG5cbiAgcmV0dXJuIHRyZWU7XG59O1xuXG4vKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cbi8qKlxuICogUGFyc2UgYW5kIGJ1aWxkIGFuIGV4cHJlc3Npb24sIGFuZCBwbGFjZSB0aGF0IGV4cHJlc3Npb24gaW4gdGhlIERPTSBub2RlXG4gKiBnaXZlbi5cbiAqL1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcihleHByZXNzaW9uLCBiYXNlTm9kZSwgb3B0aW9ucykge1xuICBiYXNlTm9kZS50ZXh0Q29udGVudCA9IFwiXCI7XG4gIHZhciBub2RlID0gcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpLnRvTm9kZSgpO1xuICBiYXNlTm9kZS5hcHBlbmRDaGlsZChub2RlKTtcbn07IC8vIEthVGVYJ3Mgc3R5bGVzIGRvbid0IHdvcmsgcHJvcGVybHkgaW4gcXVpcmtzIG1vZGUuIFByaW50IG91dCBhbiBlcnJvciwgYW5kXG4vLyBkaXNhYmxlIHJlbmRlcmluZy5cblxuXG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGlmIChkb2N1bWVudC5jb21wYXRNb2RlICE9PSBcIkNTUzFDb21wYXRcIikge1xuICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIldhcm5pbmc6IEthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS4gTWFrZSBzdXJlIHlvdXIgXCIgKyBcIndlYnNpdGUgaGFzIGEgc3VpdGFibGUgZG9jdHlwZS5cIik7XG5cbiAgICByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS5cIik7XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBQYXJzZSBhbmQgYnVpbGQgYW4gZXhwcmVzc2lvbiwgYW5kIHJldHVybiB0aGUgbWFya3VwIGZvciB0aGF0LlxuICovXG5cblxudmFyIHJlbmRlclRvU3RyaW5nID0gZnVuY3Rpb24gcmVuZGVyVG9TdHJpbmcoZXhwcmVzc2lvbiwgb3B0aW9ucykge1xuICB2YXIgbWFya3VwID0gcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpLnRvTWFya3VwKCk7XG4gIHJldHVybiBtYXJrdXA7XG59O1xuLyoqXG4gKiBQYXJzZSBhbiBleHByZXNzaW9uIGFuZCByZXR1cm4gdGhlIHBhcnNlIHRyZWUuXG4gKi9cblxuXG52YXIgZ2VuZXJhdGVQYXJzZVRyZWUgPSBmdW5jdGlvbiBnZW5lcmF0ZVBhcnNlVHJlZShleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIHZhciBzZXR0aW5ncyA9IG5ldyBTZXR0aW5ncyhvcHRpb25zKTtcbiAgcmV0dXJuIHBhcnNlVHJlZShleHByZXNzaW9uLCBzZXR0aW5ncyk7XG59O1xuLyoqXG4gKiBJZiB0aGUgZ2l2ZW4gZXJyb3IgaXMgYSBLYVRlWCBQYXJzZUVycm9yIGFuZCBvcHRpb25zLnRocm93T25FcnJvciBpcyBmYWxzZSxcbiAqIHJlbmRlcnMgdGhlIGludmFsaWQgTGFUZVggYXMgYSBzcGFuIHdpdGggaG92ZXIgdGl0bGUgZ2l2aW5nIHRoZSBLYVRlWFxuICogZXJyb3IgbWVzc2FnZS4gIE90aGVyd2lzZSwgc2ltcGx5IHRocm93cyB0aGUgZXJyb3IuXG4gKi9cblxuXG52YXIgcmVuZGVyRXJyb3IgPSBmdW5jdGlvbiByZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IgfHwgIShlcnJvciBpbnN0YW5jZW9mIFBhcnNlRXJyb3IpKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImthdGV4LWVycm9yXCJdLCBbbmV3IFN5bWJvbE5vZGUoZXhwcmVzc2lvbildKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLCBlcnJvci50b1N0cmluZygpKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImNvbG9yOlwiICsgb3B0aW9ucy5lcnJvckNvbG9yKTtcbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIHJldHVybnMgdGhlIGthdGV4IGJ1aWxkIHRyZWUuIFRoaXMgaXMgdXNlZCBmb3IgYWR2YW5jZWRcbiAqIHVzZSBjYXNlcyAobGlrZSByZW5kZXJpbmcgdG8gY3VzdG9tIG91dHB1dCkuXG4gKi9cblxuXG52YXIgcmVuZGVyVG9Eb21UcmVlID0gZnVuY3Rpb24gcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgdmFyIHNldHRpbmdzID0gbmV3IFNldHRpbmdzKG9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgdmFyIHRyZWUgPSBwYXJzZVRyZWUoZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICAgIHJldHVybiBidWlsZFRyZWUodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiByZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIHJldHVybnMgdGhlIGthdGV4IGJ1aWxkIHRyZWUsIHdpdGgganVzdCBIVE1MIChubyBNYXRoTUwpLlxuICogVGhpcyBpcyB1c2VkIGZvciBhZHZhbmNlZCB1c2UgY2FzZXMgKGxpa2UgcmVuZGVyaW5nIHRvIGN1c3RvbSBvdXRwdXQpLlxuICovXG5cblxudmFyIHJlbmRlclRvSFRNTFRyZWUgPSBmdW5jdGlvbiByZW5kZXJUb0hUTUxUcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgdmFyIHNldHRpbmdzID0gbmV3IFNldHRpbmdzKG9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgdmFyIHRyZWUgPSBwYXJzZVRyZWUoZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICAgIHJldHVybiBidWlsZEhUTUxUcmVlKHRyZWUsIGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gcmVuZGVyRXJyb3IoZXJyb3IsIGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbiAgfVxufTtcblxudmFyIGthdGV4ID0ge1xuICAvKipcbiAgICogQ3VycmVudCBLYVRlWCB2ZXJzaW9uXG4gICAqL1xuICB2ZXJzaW9uOiBcIjAuMTYuOFwiLFxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBnaXZlbiBMYVRlWCBpbnRvIGFuIEhUTUwrTWF0aE1MIGNvbWJpbmF0aW9uLCBhbmQgYWRkc1xuICAgKiBpdCBhcyBhIGNoaWxkIHRvIHRoZSBzcGVjaWZpZWQgRE9NIG5vZGUuXG4gICAqL1xuICByZW5kZXIsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCtNYXRoTUwgY29tYmluYXRpb24gc3RyaW5nLFxuICAgKiBmb3Igc2VuZGluZyB0byB0aGUgY2xpZW50LlxuICAgKi9cbiAgcmVuZGVyVG9TdHJpbmcsXG5cbiAgLyoqXG4gICAqIEthVGVYIGVycm9yLCB1c3VhbGx5IGR1cmluZyBwYXJzaW5nLlxuICAgKi9cbiAgUGFyc2VFcnJvcixcblxuICAvKipcbiAgICogVGhlIHNoZW1hIG9mIFNldHRpbmdzXG4gICAqL1xuICBTRVRUSU5HU19TQ0hFTUEsXG5cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgZ2l2ZW4gTGFUZVggaW50byBLYVRlWCdzIGludGVybmFsIHBhcnNlIHRyZWUgc3RydWN0dXJlLFxuICAgKiB3aXRob3V0IHJlbmRlcmluZyB0byBIVE1MIG9yIE1hdGhNTC5cbiAgICpcbiAgICogTk9URTogVGhpcyBtZXRob2QgaXMgbm90IGN1cnJlbnRseSByZWNvbW1lbmRlZCBmb3IgcHVibGljIHVzZS5cbiAgICogVGhlIGludGVybmFsIHRyZWUgcmVwcmVzZW50YXRpb24gaXMgdW5zdGFibGUgYW5kIGlzIHZlcnkgbGlrZWx5XG4gICAqIHRvIGNoYW5nZS4gVXNlIGF0IHlvdXIgb3duIHJpc2suXG4gICAqL1xuICBfX3BhcnNlOiBnZW5lcmF0ZVBhcnNlVHJlZSxcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZ2l2ZW4gTGFUZVggaW50byBhbiBIVE1MK01hdGhNTCBpbnRlcm5hbCBET00gdHJlZVxuICAgKiByZXByZXNlbnRhdGlvbiwgd2l0aG91dCBmbGF0dGVuaW5nIHRoYXQgcmVwcmVzZW50YXRpb24gdG8gYSBzdHJpbmcuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19yZW5kZXJUb0RvbVRyZWU6IHJlbmRlclRvRG9tVHJlZSxcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZ2l2ZW4gTGFUZVggaW50byBhbiBIVE1MIGludGVybmFsIERPTSB0cmVlIHJlcHJlc2VudGF0aW9uLFxuICAgKiB3aXRob3V0IE1hdGhNTCBhbmQgd2l0aG91dCBmbGF0dGVuaW5nIHRoYXQgcmVwcmVzZW50YXRpb24gdG8gYSBzdHJpbmcuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19yZW5kZXJUb0hUTUxUcmVlOiByZW5kZXJUb0hUTUxUcmVlLFxuXG4gIC8qKlxuICAgKiBleHRlbmRzIGludGVybmFsIGZvbnQgbWV0cmljcyBvYmplY3Qgd2l0aCBhIG5ldyBvYmplY3RcbiAgICogZWFjaCBrZXkgaW4gdGhlIG5ldyBvYmplY3QgcmVwcmVzZW50cyBhIGZvbnQgbmFtZVxuICAqL1xuICBfX3NldEZvbnRNZXRyaWNzOiBzZXRGb250TWV0cmljcyxcblxuICAvKipcbiAgICogYWRkcyBhIG5ldyBzeW1ib2wgdG8gYnVpbHRpbiBzeW1ib2xzIHRhYmxlXG4gICAqL1xuICBfX2RlZmluZVN5bWJvbDogZGVmaW5lU3ltYm9sLFxuXG4gIC8qKlxuICAgKiBhZGRzIGEgbmV3IGZ1bmN0aW9uIHRvIGJ1aWx0aW4gZnVuY3Rpb24gbGlzdCxcbiAgICogd2hpY2ggZGlyZWN0bHkgcHJvZHVjZSBwYXJzZSB0cmVlIGVsZW1lbnRzXG4gICAqIGFuZCBoYXZlIHRoZWlyIG93biBodG1sL21hdGhtbCBidWlsZGVyc1xuICAgKi9cbiAgX19kZWZpbmVGdW5jdGlvbjogZGVmaW5lRnVuY3Rpb24sXG5cbiAgLyoqXG4gICAqIGFkZHMgYSBuZXcgbWFjcm8gdG8gYnVpbHRpbiBtYWNybyBsaXN0XG4gICAqL1xuICBfX2RlZmluZU1hY3JvOiBkZWZpbmVNYWNybyxcblxuICAvKipcbiAgICogRXhwb3NlIHRoZSBkb20gdHJlZSBub2RlIHR5cGVzLCB3aGljaCBjYW4gYmUgdXNlZnVsIGZvciB0eXBlIGNoZWNraW5nIG5vZGVzLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fZG9tVHJlZToge1xuICAgIFNwYW4sXG4gICAgQW5jaG9yLFxuICAgIFN5bWJvbE5vZGUsXG4gICAgU3ZnTm9kZSxcbiAgICBQYXRoTm9kZSxcbiAgICBMaW5lTm9kZVxuICB9XG59O1xuXG5leHBvcnQgeyBrYXRleCBhcyBkZWZhdWx0IH07XG4iXSwibmFtZXMiOlsiU291cmNlTG9jYXRpb24iLCJjb25zdHJ1Y3RvciIsImxleGVyIiwic3RhcnQiLCJlbmQiLCJyYW5nZSIsImZpcnN0Iiwic2Vjb25kIiwibG9jIiwiVG9rZW4iLCJ0ZXh0Iiwibm9leHBhbmQiLCJ0cmVhdEFzUmVsYXgiLCJlbmRUb2tlbiIsIlBhcnNlRXJyb3IiLCJtZXNzYWdlIiwidG9rZW4iLCJuYW1lIiwicG9zaXRpb24iLCJsZW5ndGgiLCJyYXdNZXNzYWdlIiwiZXJyb3IiLCJpbnB1dCIsInVuZGVybGluZWQiLCJzbGljZSIsInJlcGxhY2UiLCJsZWZ0IiwicmlnaHQiLCJzZWxmIiwiRXJyb3IiLCJfX3Byb3RvX18iLCJwcm90b3R5cGUiLCJjb250YWlucyIsImxpc3QiLCJlbGVtIiwiaW5kZXhPZiIsImRlZmx0Iiwic2V0dGluZyIsImRlZmF1bHRJZlVuZGVmaW5lZCIsInVuZGVmaW5lZCIsInVwcGVyY2FzZSIsImh5cGhlbmF0ZSIsInN0ciIsInRvTG93ZXJDYXNlIiwiRVNDQVBFX0xPT0tVUCIsIkVTQ0FQRV9SRUdFWCIsImVzY2FwZSIsIlN0cmluZyIsIm1hdGNoIiwiZ2V0QmFzZUVsZW0iLCJncm91cCIsInR5cGUiLCJib2R5IiwiaXNDaGFyYWN0ZXJCb3giLCJiYXNlRWxlbSIsImFzc2VydCIsInZhbHVlIiwicHJvdG9jb2xGcm9tVXJsIiwidXJsIiwicHJvdG9jb2wiLCJleGVjIiwidXRpbHMiLCJTRVRUSU5HU19TQ0hFTUEiLCJkaXNwbGF5TW9kZSIsImRlc2NyaXB0aW9uIiwiY2xpIiwib3V0cHV0IiwiZW51bSIsImxlcW5vIiwiZmxlcW4iLCJ0aHJvd09uRXJyb3IiLCJkZWZhdWx0IiwiY2xpRGVzY3JpcHRpb24iLCJlcnJvckNvbG9yIiwiY2xpUHJvY2Vzc29yIiwiY29sb3IiLCJtYWNyb3MiLCJjbGlEZWZhdWx0IiwiZGVmIiwiZGVmcyIsInB1c2giLCJtaW5SdWxlVGhpY2tuZXNzIiwicHJvY2Vzc29yIiwidCIsIk1hdGgiLCJtYXgiLCJwYXJzZUZsb2F0IiwiY29sb3JJc1RleHRDb2xvciIsInN0cmljdCIsInRydXN0IiwibWF4U2l6ZSIsIkluZmluaXR5IiwicyIsInBhcnNlSW50IiwibWF4RXhwYW5kIiwibiIsImdsb2JhbEdyb3VwIiwiZ2V0RGVmYXVsdFZhbHVlIiwic2NoZW1hIiwiZGVmYXVsdFR5cGUiLCJBcnJheSIsImlzQXJyYXkiLCJTZXR0aW5ncyIsIm9wdGlvbnMiLCJwcm9wIiwiaGFzT3duUHJvcGVydHkiLCJyZXBvcnROb25zdHJpY3QiLCJlcnJvckNvZGUiLCJlcnJvck1zZyIsImNvbnNvbGUiLCJ3YXJuIiwidXNlU3RyaWN0QmVoYXZpb3IiLCJpc1RydXN0ZWQiLCJjb250ZXh0IiwiQm9vbGVhbiIsIlN0eWxlIiwiaWQiLCJzaXplIiwiY3JhbXBlZCIsInN1cCIsInN0eWxlcyIsInN1YiIsImZyYWNOdW0iLCJmcmFjRGVuIiwiY3JhbXAiLCJ0ZXh0JDEiLCJpc1RpZ2h0IiwiRCIsIkRjIiwiVCIsIlRjIiwiUyIsIlNjIiwiU1MiLCJTU2MiLCJTdHlsZSQxIiwiRElTUExBWSIsIlRFWFQiLCJTQ1JJUFQiLCJTQ1JJUFRTQ1JJUFQiLCJzY3JpcHREYXRhIiwiYmxvY2tzIiwic2NyaXB0RnJvbUNvZGVwb2ludCIsImNvZGVwb2ludCIsImkiLCJzY3JpcHQiLCJfaSIsImJsb2NrIiwiYWxsQmxvY2tzIiwiZm9yRWFjaCIsImIiLCJzdXBwb3J0ZWRDb2RlcG9pbnQiLCJoTGluZVBhZCIsInNxcnRNYWluIiwiZXh0cmFWaW5jdWx1bSIsInNxcnRTaXplMSIsInNxcnRTaXplMiIsInNxcnRTaXplMyIsInNxcnRTaXplNCIsInBoYXNlUGF0aCIsInkiLCJ4Iiwic3FydFRhbGwiLCJ2aWV3Qm94SGVpZ2h0IiwidmVydFNlZ21lbnQiLCJzcXJ0UGF0aCIsInBhdGgiLCJpbm5lclBhdGgiLCJoZWlnaHQiLCJkb3VibGVsZWZ0YXJyb3ciLCJkb3VibGVyaWdodGFycm93IiwibGVmdGFycm93IiwibGVmdGJyYWNlIiwibGVmdGJyYWNldW5kZXIiLCJsZWZ0Z3JvdXAiLCJsZWZ0Z3JvdXB1bmRlciIsImxlZnRoYXJwb29uIiwibGVmdGhhcnBvb25wbHVzIiwibGVmdGhhcnBvb25kb3duIiwibGVmdGhhcnBvb25kb3ducGx1cyIsImxlZnRob29rIiwibGVmdGxpbmVzZWdtZW50IiwibGVmdG1hcHN0byIsImxlZnRUb0Zyb20iLCJsb25nZXF1YWwiLCJtaWRicmFjZSIsIm1pZGJyYWNldW5kZXIiLCJvaWludFNpemUxIiwib2lpbnRTaXplMiIsIm9paWludFNpemUxIiwib2lpaW50U2l6ZTIiLCJyaWdodGFycm93IiwicmlnaHRicmFjZSIsInJpZ2h0YnJhY2V1bmRlciIsInJpZ2h0Z3JvdXAiLCJyaWdodGdyb3VwdW5kZXIiLCJyaWdodGhhcnBvb24iLCJyaWdodGhhcnBvb25wbHVzIiwicmlnaHRoYXJwb29uZG93biIsInJpZ2h0aGFycG9vbmRvd25wbHVzIiwicmlnaHRob29rIiwicmlnaHRsaW5lc2VnbWVudCIsInJpZ2h0VG9Gcm9tIiwidHdvaGVhZGxlZnRhcnJvdyIsInR3b2hlYWRyaWdodGFycm93IiwidGlsZGUxIiwidGlsZGUyIiwidGlsZGUzIiwidGlsZGU0IiwidmVjIiwid2lkZWhhdDEiLCJ3aWRlaGF0MiIsIndpZGVoYXQzIiwid2lkZWhhdDQiLCJ3aWRlY2hlY2sxIiwid2lkZWNoZWNrMiIsIndpZGVjaGVjazMiLCJ3aWRlY2hlY2s0IiwiYmFyYWJvdmVsZWZ0YXJyb3ciLCJyaWdodGFycm93YWJvdmViYXIiLCJiYXJhYm92ZXNob3J0bGVmdGhhcnBvb24iLCJyaWdodGhhcnBvb25hYm92ZXNob3J0YmFyIiwic2hvcnRiYXJhYm92ZWxlZnRoYXJwb29uIiwic2hvcnRyaWdodGhhcnBvb25hYm92ZWJhciIsInRhbGxEZWxpbSIsImxhYmVsIiwibWlkSGVpZ2h0IiwiRG9jdW1lbnRGcmFnbWVudCIsImNoaWxkcmVuIiwiY2xhc3NlcyIsImRlcHRoIiwibWF4Rm9udFNpemUiLCJzdHlsZSIsImhhc0NsYXNzIiwiY2xhc3NOYW1lIiwidG9Ob2RlIiwiZnJhZyIsImRvY3VtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImFwcGVuZENoaWxkIiwidG9NYXJrdXAiLCJtYXJrdXAiLCJ0b1RleHQiLCJjaGlsZCIsIm1hcCIsImpvaW4iLCJmb250TWV0cmljc0RhdGEiLCJzaWdtYXNBbmRYaXMiLCJzbGFudCIsInNwYWNlIiwic3RyZXRjaCIsInNocmluayIsInhIZWlnaHQiLCJxdWFkIiwiZXh0cmFTcGFjZSIsIm51bTEiLCJudW0yIiwibnVtMyIsImRlbm9tMSIsImRlbm9tMiIsInN1cDEiLCJzdXAyIiwic3VwMyIsInN1YjEiLCJzdWIyIiwic3VwRHJvcCIsInN1YkRyb3AiLCJkZWxpbTEiLCJkZWxpbTIiLCJheGlzSGVpZ2h0IiwiZGVmYXVsdFJ1bGVUaGlja25lc3MiLCJiaWdPcFNwYWNpbmcxIiwiYmlnT3BTcGFjaW5nMiIsImJpZ09wU3BhY2luZzMiLCJiaWdPcFNwYWNpbmc0IiwiYmlnT3BTcGFjaW5nNSIsInNxcnRSdWxlVGhpY2tuZXNzIiwicHRQZXJFbSIsImRvdWJsZVJ1bGVTZXAiLCJhcnJheVJ1bGVXaWR0aCIsImZib3hzZXAiLCJmYm94cnVsZSIsImV4dHJhQ2hhcmFjdGVyTWFwIiwic2V0Rm9udE1ldHJpY3MiLCJmb250TmFtZSIsIm1ldHJpY3MiLCJnZXRDaGFyYWN0ZXJNZXRyaWNzIiwiY2hhcmFjdGVyIiwiZm9udCIsIm1vZGUiLCJjaCIsImNoYXJDb2RlQXQiLCJpdGFsaWMiLCJza2V3Iiwid2lkdGgiLCJmb250TWV0cmljc0J5U2l6ZUluZGV4IiwiZ2V0R2xvYmFsTWV0cmljcyIsInNpemVJbmRleCIsImNzc0VtUGVyTXUiLCJrZXkiLCJzaXplU3R5bGVNYXAiLCJzaXplTXVsdGlwbGllcnMiLCJzaXplQXRTdHlsZSIsIk9wdGlvbnMiLCJkYXRhIiwidGV4dFNpemUiLCJwaGFudG9tIiwiZm9udEZhbWlseSIsImZvbnRXZWlnaHQiLCJmb250U2hhcGUiLCJzaXplTXVsdGlwbGllciIsIl9mb250TWV0cmljcyIsIkJBU0VTSVpFIiwiZXh0ZW5kIiwiZXh0ZW5zaW9uIiwiaGF2aW5nU3R5bGUiLCJoYXZpbmdDcmFtcGVkU3R5bGUiLCJoYXZpbmdTaXplIiwiaGF2aW5nQmFzZVN0eWxlIiwid2FudFNpemUiLCJoYXZpbmdCYXNlU2l6aW5nIiwid2l0aENvbG9yIiwid2l0aFBoYW50b20iLCJ3aXRoRm9udCIsIndpdGhUZXh0Rm9udEZhbWlseSIsIndpdGhUZXh0Rm9udFdlaWdodCIsIndpdGhUZXh0Rm9udFNoYXBlIiwic2l6aW5nQ2xhc3NlcyIsIm9sZE9wdGlvbnMiLCJiYXNlU2l6aW5nQ2xhc3NlcyIsImZvbnRNZXRyaWNzIiwiZ2V0Q29sb3IiLCJwdFBlclVuaXQiLCJyZWxhdGl2ZVVuaXQiLCJ2YWxpZFVuaXQiLCJ1bml0IiwiY2FsY3VsYXRlU2l6ZSIsInNpemVWYWx1ZSIsInNjYWxlIiwidW5pdE9wdGlvbnMiLCJtaW4iLCJudW1iZXIiLCJtYWtlRW0iLCJ0b0ZpeGVkIiwiY3JlYXRlQ2xhc3MiLCJmaWx0ZXIiLCJjbHMiLCJpbml0Tm9kZSIsImF0dHJpYnV0ZXMiLCJ0YWdOYW1lIiwibm9kZSIsImNyZWF0ZUVsZW1lbnQiLCJhdHRyIiwic2V0QXR0cmlidXRlIiwiU3BhbiIsImNhbGwiLCJhdHRyaWJ1dGUiLCJBbmNob3IiLCJocmVmIiwiSW1nIiwic3JjIiwiYWx0IiwiaUNvbWJpbmF0aW9ucyIsIlN5bWJvbE5vZGUiLCJ0ZXN0IiwiY3JlYXRlVGV4dE5vZGUiLCJzcGFuIiwibWFyZ2luUmlnaHQiLCJuZWVkc1NwYW4iLCJlc2NhcGVkIiwiU3ZnTm9kZSIsInN2Z05TIiwiY3JlYXRlRWxlbWVudE5TIiwiT2JqZWN0IiwiUGF0aE5vZGUiLCJwYXRoTmFtZSIsImFsdGVybmF0ZSIsIkxpbmVOb2RlIiwiYXNzZXJ0U3ltYm9sRG9tTm9kZSIsImFzc2VydFNwYW4iLCJBVE9NUyIsIk5PTl9BVE9NUyIsInN5bWJvbHMiLCJkZWZpbmVTeW1ib2wiLCJhY2NlcHRVbmljb2RlQ2hhciIsIm1hdGgiLCJtYWluIiwiYW1zIiwiYWNjZW50IiwiYmluIiwiY2xvc2UiLCJpbm5lciIsIm1hdGhvcmQiLCJvcCIsIm9wZW4iLCJwdW5jdCIsInJlbCIsInNwYWNpbmciLCJ0ZXh0b3JkIiwibGlnYXR1cmVzIiwibWF0aFRleHRTeW1ib2xzIiwiY2hhckF0IiwidGV4dFN5bWJvbHMiLCJfY2giLCJsZXR0ZXJzIiwiX2kyIiwiX2NoMiIsIndpZGVDaGFyIiwiX2kzIiwiX2NoMyIsImZyb21DaGFyQ29kZSIsIl9pNCIsIl9jaDQiLCJ0b1N0cmluZyIsImV4dHJhTGF0aW4iLCJfaTUiLCJfY2g1Iiwid2lkZUxhdGluTGV0dGVyRGF0YSIsIndpZGVOdW1lcmFsRGF0YSIsIndpZGVDaGFyYWN0ZXJGb250IiwiSCIsIkwiLCJjb2RlUG9pbnQiLCJqIiwiZmxvb3IiLCJsb29rdXBTeW1ib2wiLCJtYWtlU3ltYm9sIiwibG9va3VwIiwic3ltYm9sTm9kZSIsIm1hdGhzeW0iLCJjb25jYXQiLCJib2xkc3ltYm9sIiwiZm9udENsYXNzIiwibWFrZU9yZCIsImlzRm9udCIsImZvbnRPckZhbWlseSIsIndpZGVGb250TmFtZSIsIndpZGVGb250Q2xhc3MiLCJmb250Q2xhc3NlcyIsImZvbnREYXRhIiwiZm9udE1hcCIsInJldHJpZXZlVGV4dEZvbnROYW1lIiwicGFydHMiLCJtYWtlRnJhZ21lbnQiLCJfZm9udE5hbWUiLCJfZm9udE5hbWUyIiwiX2ZvbnROYW1lMyIsImNhbkNvbWJpbmUiLCJwcmV2IiwibmV4dCIsIl9zdHlsZSIsInRyeUNvbWJpbmVDaGFycyIsImNoYXJzIiwic3BsaWNlIiwic2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4iLCJtYWtlU3BhbiQyIiwibWFrZVNwYW4iLCJtYWtlU3ZnU3BhbiIsIm1ha2VMaW5lU3BhbiIsInRoaWNrbmVzcyIsImxpbmUiLCJib3JkZXJCb3R0b21XaWR0aCIsIm1ha2VBbmNob3IiLCJhbmNob3IiLCJmcmFnbWVudCIsIndyYXBGcmFnbWVudCIsImdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aCIsInBhcmFtcyIsInBvc2l0aW9uVHlwZSIsIm9sZENoaWxkcmVuIiwiX2RlcHRoIiwic2hpZnQiLCJjdXJyUG9zIiwiZGlmZiIsImJvdHRvbSIsInBvc2l0aW9uRGF0YSIsImZpcnN0Q2hpbGQiLCJtYWtlVkxpc3QiLCJwc3RydXRTaXplIiwicHN0cnV0IiwicmVhbENoaWxkcmVuIiwibWluUG9zIiwibWF4UG9zIiwiX2NoaWxkIiwiX2VsZW0iLCJ3cmFwcGVyQ2xhc3NlcyIsIndyYXBwZXJTdHlsZSIsImNoaWxkV3JhcCIsInRvcCIsIm1hcmdpbkxlZnQiLCJ2bGlzdCIsInJvd3MiLCJlbXB0eVNwYW4iLCJkZXB0aFN0cnV0IiwidG9wU3RydXQiLCJ2dGFibGUiLCJtYWtlR2x1ZSIsIm1lYXN1cmVtZW50IiwicnVsZSIsImJhc2VGb250TmFtZSIsImZvbnRTdHlsZXNOYW1lIiwidmFyaWFudCIsInN2Z0RhdGEiLCJzdGF0aWNTdmciLCJzdmdOb2RlIiwiYnVpbGRDb21tb24iLCJ0aGluc3BhY2UiLCJtZWRpdW1zcGFjZSIsInRoaWNrc3BhY2UiLCJzcGFjaW5ncyIsIm1vcmQiLCJtb3AiLCJtYmluIiwibXJlbCIsIm1pbm5lciIsIm1vcGVuIiwibWNsb3NlIiwibXB1bmN0IiwidGlnaHRTcGFjaW5ncyIsIl9mdW5jdGlvbnMiLCJfaHRtbEdyb3VwQnVpbGRlcnMiLCJfbWF0aG1sR3JvdXBCdWlsZGVycyIsImRlZmluZUZ1bmN0aW9uIiwiX3JlZiIsIm5hbWVzIiwicHJvcHMiLCJoYW5kbGVyIiwiaHRtbEJ1aWxkZXIiLCJtYXRobWxCdWlsZGVyIiwibnVtQXJncyIsImFyZ1R5cGVzIiwiYWxsb3dlZEluQXJndW1lbnQiLCJhbGxvd2VkSW5UZXh0IiwiYWxsb3dlZEluTWF0aCIsIm51bU9wdGlvbmFsQXJncyIsImluZml4IiwicHJpbWl0aXZlIiwiZGVmaW5lRnVuY3Rpb25CdWlsZGVycyIsIl9yZWYyIiwibm9ybWFsaXplQXJndW1lbnQiLCJhcmciLCJvcmRhcmd1bWVudCIsIm1ha2VTcGFuJDEiLCJiaW5MZWZ0Q2FuY2VsbGVyIiwiYmluUmlnaHRDYW5jZWxsZXIiLCJzdHlsZU1hcCQxIiwiRG9tRW51bSIsImJ1aWxkRXhwcmVzc2lvbiQxIiwiYnVpbGRFeHByZXNzaW9uIiwiZXhwcmVzc2lvbiIsImlzUmVhbEdyb3VwIiwic3Vycm91bmRpbmciLCJncm91cHMiLCJidWlsZEdyb3VwJDEiLCJnbHVlT3B0aW9ucyIsImR1bW15UHJldiIsImR1bW15TmV4dCIsImlzUm9vdCIsInRyYXZlcnNlTm9uU3BhY2VOb2RlcyIsInByZXZUeXBlIiwiZ2V0VHlwZU9mRG9tVHJlZSIsIm5vZGVzIiwiY2FsbGJhY2siLCJwYXJ0aWFsR3JvdXAiLCJjaGVja1BhcnRpYWxHcm91cCIsIm5vbnNwYWNlIiwicmVzdWx0IiwiaW5zZXJ0QWZ0ZXIiLCJ1bnNoaWZ0IiwiaW5kZXgiLCJwb3AiLCJnZXRPdXRlcm1vc3ROb2RlIiwic2lkZSIsIm1ha2VOdWxsRGVsaW1pdGVyIiwibW9yZUNsYXNzZXMiLCJidWlsZEdyb3VwIiwiYmFzZU9wdGlvbnMiLCJncm91cE5vZGUiLCJtdWx0aXBsaWVyIiwiYnVpbGRIVE1MVW5icmVha2FibGUiLCJzdHJ1dCIsInZlcnRpY2FsQWxpZ24iLCJidWlsZEhUTUwiLCJ0cmVlIiwidGFnIiwiZXFuTnVtIiwibm9icmVhayIsInRhZ0NoaWxkIiwiaHRtbE5vZGUiLCJuZXdEb2N1bWVudEZyYWdtZW50IiwiTWF0aE5vZGUiLCJnZXRBdHRyaWJ1dGUiLCJUZXh0Tm9kZSIsIlNwYWNlTm9kZSIsIm1hdGhNTFRyZWUiLCJtYWtlVGV4dCIsIm1ha2VSb3ciLCJnZXRWYXJpYW50IiwiaXNPcmRncm91cCIsImxhc3RHcm91cCIsIl9ncm91cCIsImxhc3RDaGlsZCIsImJ1aWxkRXhwcmVzc2lvblJvdyIsImJ1aWxkTWF0aE1MIiwidGV4RXhwcmVzc2lvbiIsImlzRGlzcGxheU1vZGUiLCJmb3JNYXRobWxPbmx5Iiwid3JhcHBlciIsImFubm90YXRpb24iLCJzZW1hbnRpY3MiLCJ3cmFwcGVyQ2xhc3MiLCJvcHRpb25zRnJvbVNldHRpbmdzIiwic2V0dGluZ3MiLCJkaXNwbGF5V3JhcCIsImJ1aWxkVHJlZSIsImthdGV4Tm9kZSIsIm1hdGhNTE5vZGUiLCJfaHRtbE5vZGUiLCJidWlsZEhUTUxUcmVlIiwic3RyZXRjaHlDb2RlUG9pbnQiLCJ3aWRlaGF0Iiwid2lkZWNoZWNrIiwid2lkZXRpbGRlIiwidXRpbGRlIiwib3ZlcmxlZnRhcnJvdyIsInVuZGVybGVmdGFycm93IiwieGxlZnRhcnJvdyIsIm92ZXJyaWdodGFycm93IiwidW5kZXJyaWdodGFycm93IiwieHJpZ2h0YXJyb3ciLCJ1bmRlcmJyYWNlIiwib3ZlcmJyYWNlIiwib3Zlcmdyb3VwIiwidW5kZXJncm91cCIsIm92ZXJsZWZ0cmlnaHRhcnJvdyIsInVuZGVybGVmdHJpZ2h0YXJyb3ciLCJ4bGVmdHJpZ2h0YXJyb3ciLCJPdmVycmlnaHRhcnJvdyIsInhSaWdodGFycm93Iiwib3ZlcmxlZnRoYXJwb29uIiwieGxlZnRoYXJwb29udXAiLCJvdmVycmlnaHRoYXJwb29uIiwieHJpZ2h0aGFycG9vbnVwIiwieExlZnRhcnJvdyIsInhMZWZ0cmlnaHRhcnJvdyIsInhob29rbGVmdGFycm93IiwieGhvb2tyaWdodGFycm93IiwieG1hcHN0byIsInhyaWdodGhhcnBvb25kb3duIiwieGxlZnRoYXJwb29uZG93biIsInhyaWdodGxlZnRoYXJwb29ucyIsInhsZWZ0cmlnaHRoYXJwb29ucyIsInh0d29oZWFkbGVmdGFycm93IiwieHR3b2hlYWRyaWdodGFycm93IiwieGxvbmdlcXVhbCIsInh0b2Zyb20iLCJ4cmlnaHRsZWZ0YXJyb3dzIiwieHJpZ2h0ZXF1aWxpYnJpdW0iLCJ4bGVmdGVxdWlsaWJyaXVtIiwibWF0aE1Mbm9kZSIsImthdGV4SW1hZ2VzRGF0YSIsIm92ZXJsaW5lc2VnbWVudCIsInVuZGVybGluZXNlZ21lbnQiLCJncm91cExlbmd0aCIsInN2Z1NwYW4iLCJidWlsZFN2Z1NwYW5fIiwidmlld0JveFdpZHRoIiwiZ3JwIiwibnVtQ2hhcnMiLCJiYXNlIiwiX2hlaWdodCIsImltZ0luZGV4IiwibWluV2lkdGgiLCJzcGFucyIsInBhdGhzIiwiX21pbldpZHRoIiwiX3ZpZXdCb3hIZWlnaHQiLCJfaGVpZ2h0MiIsIm51bVN2Z0NoaWxkcmVuIiwid2lkdGhDbGFzc2VzIiwiYWxpZ25zIiwiYWxpZ24xIiwiX3BhdGgiLCJfc3ZnTm9kZSIsIl9zcGFuIiwiZW5jbG9zZVNwYW4iLCJ0b3BQYWQiLCJib3R0b21QYWQiLCJpbWciLCJ0b3RhbEhlaWdodCIsImJvcmRlckNvbG9yIiwibGluZXMiLCJzdHJldGNoeSIsImFzc2VydE5vZGVUeXBlIiwiYXNzZXJ0U3ltYm9sTm9kZVR5cGUiLCJ0eXBlZE5vZGUiLCJjaGVja1N5bWJvbE5vZGVUeXBlIiwiaHRtbEJ1aWxkZXIkYSIsInN1cFN1Ykdyb3VwIiwibXVzdFNoaWZ0IiwiaXNTaGlmdHkiLCJiYXNlQ2hhciIsImJhc2VHcm91cCIsImFjY2VudEJlbG93IiwiY2xlYXJhbmNlIiwiYWNjZW50Qm9keSIsImlzU3RyZXRjaHkiLCJhY2NlbnRGdWxsIiwiYWNjZW50V3JhcCIsIm1hdGhtbEJ1aWxkZXIkOSIsImFjY2VudE5vZGUiLCJOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYIiwiUmVnRXhwIiwiYXJncyIsImZ1bmNOYW1lIiwicGFyc2VyIiwiaW5uZXJHcm91cCIsImtlcm4iLCJwYWRkZWROb2RlIiwib3B0QXJncyIsImJlbG93IiwibmV3T3B0aW9ucyIsInVwcGVyR3JvdXAiLCJhcnJvd1ByZWZpeCIsImxvd2VyR3JvdXAiLCJhcnJvd0JvZHkiLCJhcnJvd1NoaWZ0IiwidXBwZXJTaGlmdCIsImxvd2VyU2hpZnQiLCJhcnJvd05vZGUiLCJ1cHBlck5vZGUiLCJsb3dlck5vZGUiLCJfbG93ZXJOb2RlIiwiaHRtbEJ1aWxkZXIkOSIsImVsZW1lbnRzIiwibWNsYXNzIiwibWF0aG1sQnVpbGRlciQ4IiwibHNwYWNlIiwicnNwYWNlIiwiYmlucmVsQ2xhc3MiLCJhdG9tIiwiZmFtaWx5IiwiX3JlZjMiLCJiYXNlQXJnIiwic2hpZnRlZEFyZyIsImJhc2VPcCIsImxpbWl0cyIsImFsd2F5c0hhbmRsZVN1cFN1YiIsInBhcmVudElzU3VwU3ViIiwic3ltYm9sIiwic3VwcHJlc3NCYXNlU2hpZnQiLCJzdXBzdWIiLCJ0ZXh0U2hhZG93IiwiY2RBcnJvd0Z1bmN0aW9uTmFtZSIsIm5ld0NlbGwiLCJpc1N0YXJ0T2ZBcnJvdyIsImlzTGFiZWxFbmQiLCJlbmRDaGFyIiwiY2RBcnJvdyIsImFycm93Q2hhciIsImxhYmVscyIsImNhbGxGdW5jdGlvbiIsImxlZnRMYWJlbCIsImJhcmVBcnJvdyIsInNpemVkQXJyb3ciLCJyaWdodExhYmVsIiwiYXJyb3dHcm91cCIsImFycm93IiwicGFyc2VDRCIsInBhcnNlZFJvd3MiLCJndWxsZXQiLCJiZWdpbkdyb3VwIiwic2V0IiwicGFyc2VFeHByZXNzaW9uIiwiZW5kR3JvdXAiLCJmZXRjaCIsImNvbnN1bWUiLCJuZXh0VG9rZW4iLCJyb3ciLCJyb3dOb2RlcyIsImNlbGwiLCJsYWJlbE51bSIsImluTGFiZWwiLCJrIiwid3JhcHBlZEFycm93IiwiY29scyIsImZpbGwiLCJhbGlnbiIsInByZWdhcCIsInBvc3RnYXAiLCJhcnJheXN0cmV0Y2giLCJhZGRKb3QiLCJyb3dHYXBzIiwiY29sU2VwYXJhdGlvblR5cGUiLCJoTGluZXNCZWZvcmVSb3ciLCJwYXJlbnQiLCJjb2RlIiwiaXNOYU4iLCJodG1sQnVpbGRlciQ4IiwibWF0aG1sQnVpbGRlciQ3IiwiYnJlYWtPblRva2VuVGV4dCIsImZ1dHVyZSIsInBhcnNlU2l6ZUdyb3VwIiwibmV3TGluZSIsIm1hcmdpblRvcCIsImdsb2JhbE1hcCIsImNoZWNrQ29udHJvbFNlcXVlbmNlIiwidG9rIiwiZ2V0UkhTIiwicG9wVG9rZW4iLCJsZXRDb21tYW5kIiwiZ2xvYmFsIiwibWFjcm8iLCJnZXQiLCJ0b2tlbnMiLCJ1bmV4cGFuZGFibGUiLCJpc0V4cGFuZGFibGUiLCJjb25zdW1lU3BhY2VzIiwicGFyc2VGdW5jdGlvbiIsImluc2VydCIsImRlbGltaXRlcnMiLCJjb25zdW1lQXJnIiwiZXhwYW5kVG9rZW5zIiwicmV2ZXJzZSIsIl9yZWY0IiwibWlkZGxlIiwicHVzaFRva2VuIiwiZ2V0TWV0cmljcyIsInN0eWxlV3JhcCIsImRlbGltIiwidG9TdHlsZSIsImRlbGltU2l6ZU11bHRpcGxpZXIiLCJjZW50ZXJTcGFuIiwibWFrZVNtYWxsRGVsaW0iLCJjZW50ZXIiLCJtYXRocm1TaXplIiwibWFrZUxhcmdlRGVsaW0iLCJtYWtlR2x5cGhTcGFuIiwic2l6ZUNsYXNzIiwiY29ybmVyIiwibWFrZUlubmVyIiwicm91bmQiLCJsYXBJbkVtcyIsImxhcCIsInZlcnRzIiwiZG91YmxlVmVydHMiLCJtYWtlU3RhY2tlZERlbGltIiwiaGVpZ2h0VG90YWwiLCJyZXBlYXQiLCJzdmdMYWJlbCIsInRvcE1ldHJpY3MiLCJ0b3BIZWlnaHRUb3RhbCIsInJlcGVhdE1ldHJpY3MiLCJyZXBlYXRIZWlnaHRUb3RhbCIsImJvdHRvbU1ldHJpY3MiLCJib3R0b21IZWlnaHRUb3RhbCIsIm1pZGRsZUhlaWdodFRvdGFsIiwibWlkZGxlRmFjdG9yIiwibWlkZGxlTWV0cmljcyIsIm1pbkhlaWdodCIsInJlcGVhdENvdW50IiwiY2VpbCIsInJlYWxIZWlnaHRUb3RhbCIsInN0YWNrIiwicGF0aFN0ciIsInN2ZyIsImlubmVySGVpZ2h0IiwiX2lubmVySGVpZ2h0IiwidmJQYWQiLCJlbVBhZCIsInNxcnRTdmciLCJzcXJ0TmFtZSIsInBhdGhOb2RlIiwibWFrZVNxcnRJbWFnZSIsInRyYXZlcnNlU2VxdWVuY2UiLCJzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UiLCJzcGFuSGVpZ2h0IiwidGV4SGVpZ2h0IiwiYWR2YW5jZVdpZHRoIiwic2l6ZVRvTWF4SGVpZ2h0IiwicnVsZVdpZHRoIiwic3RhY2tMYXJnZURlbGltaXRlcnMiLCJzdGFja0Fsd2F5c0RlbGltaXRlcnMiLCJzdGFja05ldmVyRGVsaW1pdGVycyIsIm1ha2VTaXplZERlbGltIiwic3RhY2tOZXZlckRlbGltaXRlclNlcXVlbmNlIiwic3RhY2tBbHdheXNEZWxpbWl0ZXJTZXF1ZW5jZSIsImRlbGltVHlwZVRvRm9udCIsInNlcXVlbmNlIiwiaGVpZ2h0RGVwdGgiLCJtYWtlQ3VzdG9tU2l6ZWREZWxpbSIsImRlbGltVHlwZSIsIm1ha2VMZWZ0UmlnaHREZWxpbSIsImRlbGltaXRlckZhY3RvciIsImRlbGltaXRlckV4dGVuZCIsIm1heERpc3RGcm9tQXhpcyIsImRlbGltaXRlciIsInNxcnRJbWFnZSIsInNpemVkRGVsaW0iLCJjdXN0b21TaXplZERlbGltIiwibGVmdFJpZ2h0RGVsaW0iLCJkZWxpbWl0ZXJTaXplcyIsImNoZWNrRGVsaW1pdGVyIiwic3ltRGVsaW0iLCJhc3NlcnRQYXJzZWQiLCJsZWZ0cmlnaHREZXB0aCIsImV4cGVjdCIsInJpZ2h0Q29sb3IiLCJpbm5lckRlcHRoIiwiaGFkTWlkZGxlIiwiaXNNaWRkbGUiLCJsZWZ0RGVsaW0iLCJtaWRkbGVEZWxpbSIsInJpZ2h0RGVsaW0iLCJjb2xvck9wdGlvbnMiLCJsZWZ0Tm9kZSIsInJpZ2h0Tm9kZSIsInRleHROb2RlIiwibWlkZGxlTm9kZSIsImh0bWxCdWlsZGVyJDciLCJpbWdTaGlmdCIsImlzU2luZ2xlQ2hhciIsImxpbmVXZWlnaHQiLCJhbmdsZUhlaWdodCIsInBhZGRpbmdMZWZ0IiwicnVsZVRoaWNrbmVzcyIsImJvcmRlclN0eWxlIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJiYWNrZ3JvdW5kQ29sb3IiLCJtYXRobWxCdWlsZGVyJDYiLCJ0aGsiLCJfcmVmNSIsIl9lbnZpcm9ubWVudHMiLCJkZWZpbmVFbnZpcm9ubWVudCIsIl9tYWNyb3MiLCJkZWZpbmVNYWNybyIsImdldEhMaW5lcyIsImhsaW5lSW5mbyIsIm54dCIsInZhbGlkYXRlQW1zRW52aXJvbm1lbnRDb250ZXh0IiwiZW52TmFtZSIsImdldEF1dG9UYWciLCJwYXJzZUFycmF5IiwiaHNraXBCZWZvcmVBbmRBZnRlciIsImF1dG9UYWciLCJzaW5nbGVSb3ciLCJlbXB0eVNpbmdsZVJvdyIsIm1heE51bUNvbHMiLCJleHBhbmRNYWNyb0FzVGV4dCIsInRhZ3MiLCJiZWdpblJvdyIsImVuZFJvdyIsInN1YnBhcnNlIiwiZENlbGxTdHlsZSIsImh0bWxCdWlsZGVyJDYiLCJyIiwiYyIsIm5yIiwibmMiLCJobGluZXMiLCJwdCIsImFycmF5Y29sc2VwIiwibG9jYWxNdWx0aXBsaWVyIiwiYmFzZWxpbmVza2lwIiwiam90IiwiYXJyYXlza2lwIiwiYXJzdHJ1dEhlaWdodCIsImFyc3RydXREZXB0aCIsInNldEhMaW5lUG9zIiwiaGxpbmVzSW5HYXAiLCJwb3MiLCJpc0Rhc2hlZCIsImlucm93Iiwib3V0cm93IiwiZWx0Iiwicm93R2FwIiwiZ2FwIiwib2Zmc2V0IiwiY29sRGVzY3JpcHRpb25zIiwiY29sU2VwIiwiY29sRGVzY3JOdW0iLCJ0YWdTcGFucyIsInNvbWUiLCJydyIsInRhZ1NwYW4iLCJjb2xEZXNjciIsImZpcnN0U2VwYXJhdG9yIiwic2VwYXJhdG9yIiwibGluZVR5cGUiLCJib3JkZXJSaWdodFN0eWxlIiwibWFyZ2luIiwiX3NoaWZ0Iiwic2Vwd2lkdGgiLCJjb2wiLCJfc2hpZnQyIiwiZGFzaGVzIiwidkxpc3RFbGVtcyIsImhsaW5lIiwibGluZVNoaWZ0IiwiZXFuTnVtQ29sIiwiYWxpZ25NYXAiLCJsIiwibWF0aG1sQnVpbGRlciQ1IiwidGJsIiwiZ2x1ZSIsInRhYmxlIiwibWVuY2xvc2UiLCJjb2x1bW5MaW5lcyIsInByZXZUeXBlV2FzQWxpZ24iLCJpU3RhcnQiLCJpRW5kIiwidHJpbSIsIl9jb2xzIiwicm93TGluZXMiLCJhbGlnbmVkSGFuZGxlciIsInNlcGFyYXRpb25UeXBlIiwiaXNTcGxpdCIsInJlcyIsIm51bU1hdGhzIiwibnVtQ29scyIsImVtcHR5R3JvdXAiLCJhcmcwIiwiTnVtYmVyIiwiaXNBbGlnbmVkIiwic3R5bGluZyIsIm9yZGdyb3VwIiwiY3VyTWF0aHMiLCJzeW1Ob2RlIiwiY29sYWxpZ24iLCJuZGUiLCJjYSIsImNvbEFsaWduIiwicGF5bG9hZCIsImVudmlyb25tZW50cyIsIm5hbWVHcm91cCIsImVudiIsIl9hcmdzIiwicGFyc2VBcmd1bWVudHMiLCJlbmROYW1lVG9rZW4iLCJodG1sQnVpbGRlciQ1IiwibWF0aG1sQnVpbGRlciQ0IiwiZm9udEFsaWFzZXMiLCJmdW5jIiwiYWRqdXN0U3R5bGUiLCJvcmlnaW5hbFN0eWxlIiwiaHRtbEJ1aWxkZXIkNCIsIm5zdHlsZSIsImRzdHlsZSIsIm51bWVybSIsIm51bWVyIiwiY29udGludWVkIiwiaFN0cnV0IiwiZFN0cnV0IiwiZGVub21tIiwiZGVub20iLCJydWxlU3BhY2luZyIsImhhc0JhckxpbmUiLCJiYXJTaXplIiwibnVtU2hpZnQiLCJkZW5vbVNoaWZ0IiwiZnJhYyIsImNhbmRpZGF0ZUNsZWFyYW5jZSIsIm1pZFNoaWZ0IiwiZGVsaW1TaXplIiwibWF0aG1sQnVpbGRlciQzIiwiaXNEaXNwbGF5Iiwid2l0aERlbGltcyIsImxlZnRPcCIsInJpZ2h0T3AiLCJyZXBsYWNlV2l0aCIsInN0eWxBcnJheSIsImRlbGltRnJvbVZhbHVlIiwiZGVsaW1TdHJpbmciLCJiYXJOb2RlIiwiaXNCbGFuayIsInN0eWwiLCJ0ZXh0T3JkIiwiX3JlZjYiLCJodG1sQnVpbGRlciQzIiwiYnJhY2VCb2R5IiwiaXNPdmVyIiwidlNwYW4iLCJtYXRobWxCdWlsZGVyJDIiLCJjb21tYW5kIiwiZm9ybWF0VW5zdXBwb3J0ZWRDbWQiLCJzdHJpbmciLCJ0cnVzdENvbnRleHQiLCJjbGFzcyIsInNwbGl0Iiwia2V5VmFsIiwiaHRtbCIsIm1hdGhtbCIsInNpemVEYXRhIiwidG90YWxoZWlnaHQiLCJhdHRyaWJ1dGVTdHIiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsIm1hdGhGdW5jdGlvbiIsIm11VW5pdCIsImRpbWVuc2lvbiIsImFsaWdubWVudCIsImZpeCIsIm91dGVyTW9kZSIsInN3aXRjaE1vZGUiLCJjaG9vc2VNYXRoU3R5bGUiLCJkaXNwbGF5Iiwic2NyaXB0c2NyaXB0IiwiYXNzZW1ibGVTdXBTdWIiLCJzdXBHcm91cCIsInN1Ykdyb3VwIiwiYmFzZVNoaWZ0Iiwic3ViSXNTaW5nbGVDaGFyYWN0ZXIiLCJmaW5hbEdyb3VwIiwiX2JvdHRvbSIsInNwYWNlciIsIm5vU3VjY2Vzc29yIiwiaHRtbEJ1aWxkZXIkMiIsImhhc0xpbWl0cyIsImxhcmdlIiwic3Rhc2giLCJvdmFsIiwibWF0aG1sQnVpbGRlciQxIiwib3BlcmF0b3IiLCJzaW5nbGVDaGFyQmlnT3BzIiwiZk5hbWUiLCJzaW5nbGVDaGFySW50ZWdyYWxzIiwiaHRtbEJ1aWxkZXIkMSIsImNoaWxkVGV4dCIsImlzQWxsU3RyaW5nIiwid29yZCIsImlkZW50aWZpZXIiLCJzZW1pc2ltcGxlIiwiYW1vdW50IiwiZHkiLCJzaXppbmdHcm91cCIsImFwcGx5Iiwic2l6ZUZ1bmNzIiwic21hc2hIZWlnaHQiLCJzbWFzaERlcHRoIiwidGJBcmciLCJsZXR0ZXIiLCJzbWFzaGVkTm9kZSIsInRoZXRhIiwicGhpIiwibGluZUNsZWFyYW5jZSIsIm1pbkRlbGltaXRlckhlaWdodCIsImRlbGltRGVwdGgiLCJyb290bSIsInRvU2hpZnQiLCJyb290Vkxpc3QiLCJyb290Vkxpc3RXcmFwIiwic3R5bGVNYXAiLCJuZXdTdHlsZSIsInN0eWxlQXR0cmlidXRlcyIsImh0bWxCdWlsZGVyRGVsZWdhdGUiLCJkZWxlZ2F0ZSIsIl9kZWxlZ2F0ZSIsImlzU3VwIiwiYnVpbGRlckRlbGVnYXRlIiwidmFsdWVCYXNlIiwidmFsdWVTdXAiLCJ2YWx1ZVN1YiIsInN1cG0iLCJzdWJtIiwic3VwU2hpZnQiLCJzdWJTaGlmdCIsIl9uZXdPcHRpb25zIiwibWluU3VwU2hpZnQiLCJpc09paW50IiwibWF4V2lkdGgiLCJwc2kiLCJ2bGlzdEVsZW0iLCJfdmxpc3RFbGVtIiwiaXNCcmFjZSIsIm5vZGVUeXBlIiwiX2Jhc2UiLCJfYmFzZTIiLCJkZWZhdWx0VmFyaWFudCIsImNzc1NwYWNlIiwicmVndWxhclNwYWNlIiwib3JkIiwicGFkIiwicGFkTm9kZSIsInRleHRGb250RmFtaWxpZXMiLCJ0ZXh0Rm9udFdlaWdodHMiLCJ0ZXh0Rm9udFNoYXBlcyIsIm9wdGlvbnNXaXRoRm9udCIsIm1ha2VWZXJiIiwic3RhciIsImZ1bmN0aW9ucyIsInNwYWNlUmVnZXhTdHJpbmciLCJjb250cm9sV29yZFJlZ2V4U3RyaW5nIiwiY29udHJvbFN5bWJvbFJlZ2V4U3RyaW5nIiwiY29udHJvbFdvcmRXaGl0ZXNwYWNlUmVnZXhTdHJpbmciLCJjb250cm9sU3BhY2VSZWdleFN0cmluZyIsImNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyIsImNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya3NFbmRSZWdleCIsInRva2VuUmVnZXhTdHJpbmciLCJMZXhlciIsInRva2VuUmVnZXgiLCJjYXRjb2RlcyIsInNldENhdGNvZGUiLCJjaGFyIiwibGV4IiwibGFzdEluZGV4IiwibmxJbmRleCIsIk5hbWVzcGFjZSIsImJ1aWx0aW5zIiwiZ2xvYmFsTWFjcm9zIiwiY3VycmVudCIsInVuZGVmU3RhY2siLCJ1bmRlZnMiLCJ1bmRlZiIsImVuZEdyb3VwcyIsImhhcyIsImV4cGFuZE9uY2UiLCJjb25zdW1lQXJncyIsImRpZ2l0VG9OdW1iZXIiLCJkaWdpdCIsIm5ld2NvbW1hbmQiLCJleGlzdHNPSyIsIm5vbmV4aXN0c09LIiwiZXhpc3RzIiwiaXNEZWZpbmVkIiwiYXJnVGV4dCIsImV4cGFuZE5leHRUb2tlbiIsImxvZyIsImRvdHNCeVRva2VuIiwidGhlZG90cyIsImV4cGFuZEFmdGVyRnV0dXJlIiwic3BhY2VBZnRlckRvdHMiLCJsYXRleFJhaXNlQSIsImJyYWtldEhlbHBlciIsIm9uZSIsIm1pZGRsZURvdWJsZSIsIm9sZE1pZGRsZSIsIm9sZE1pZGRsZURvdWJsZSIsIm1pZE1hY3JvIiwiZG91YmxlIiwiZG91YmxlZCIsImV4cGFuZGVkIiwiaW1wbGljaXRDb21tYW5kcyIsIk1hY3JvRXhwYW5kZXIiLCJleHBhbnNpb25Db3VudCIsImZlZWQiLCJuZXdNb2RlIiwicHVzaFRva2VucyIsInNjYW5Bcmd1bWVudCIsImlzT3B0aW9uYWwiLCJkZWxpbXMiLCJpc0RlbGltaXRlZCIsImV4cGFuZGFibGVPbmx5IiwidG9wVG9rZW4iLCJleHBhbnNpb24iLCJfZ2V0RXhwYW5zaW9uIiwiZXhwYW5kTWFjcm8iLCJvbGRTdGFja0xlbmd0aCIsImRlZmluaXRpb24iLCJjYXRjb2RlIiwic3RyaXBwZWQiLCJib2R5TGV4ZXIiLCJ1bmljb2RlU3ViUmVnRXgiLCJ1U3Vic0FuZFN1cHMiLCJmcmVlemUiLCJ1bmljb2RlQWNjZW50cyIsInVuaWNvZGVTeW1ib2xzIiwiUGFyc2VyIiwicGFyc2UiLCJvbGRUb2tlbiIsImJyZWFrT25JbmZpeCIsImVuZE9mRXhwcmVzc2lvbiIsInBhcnNlQXRvbSIsImZvcm1MaWdhdHVyZXMiLCJoYW5kbGVJbmZpeE5vZGVzIiwib3ZlckluZGV4IiwibnVtZXJOb2RlIiwiZGVub21Ob2RlIiwibnVtZXJCb2R5IiwiZGVub21Cb2R5IiwiaGFuZGxlU3VwU3Vic2NyaXB0Iiwic3ltYm9sVG9rZW4iLCJwYXJzZUdyb3VwIiwidGV4dG9yZEFycmF5IiwiY29sb3JOb2RlIiwic3VwZXJzY3JpcHQiLCJzdWJzY3JpcHQiLCJwcmltZSIsInByaW1lcyIsImlzU3ViIiwiZnVuY0RhdGEiLCJ0b3RhbEFyZ3MiLCJhcmdUeXBlIiwicGFyc2VHcm91cE9mVHlwZSIsIm9wdGlvbmFsIiwicGFyc2VDb2xvckdyb3VwIiwicGFyc2VVcmxHcm91cCIsInBhcnNlQXJndW1lbnRHcm91cCIsInBhcnNlU3RyaW5nR3JvdXAiLCJtb2RlTmFtZSIsImFyZ1Rva2VuIiwicGFyc2VSZWdleEdyb3VwIiwicmVnZXgiLCJmaXJzdFRva2VuIiwibGFzdFRva2VuIiwiZ3JvdXBFbmQiLCJwYXJzZVN5bWJvbCIsImEiLCJ2IiwibnVjbGV1cyIsInBhcnNlVHJlZSIsInRvUGFyc2UiLCJUeXBlRXJyb3IiLCJyZW5kZXIiLCJiYXNlTm9kZSIsInRleHRDb250ZW50IiwicmVuZGVyVG9Eb21UcmVlIiwiY29tcGF0TW9kZSIsInJlbmRlclRvU3RyaW5nIiwiZ2VuZXJhdGVQYXJzZVRyZWUiLCJyZW5kZXJFcnJvciIsInJlbmRlclRvSFRNTFRyZWUiLCJrYXRleCIsInZlcnNpb24iLCJfX3BhcnNlIiwiX19yZW5kZXJUb0RvbVRyZWUiLCJfX3JlbmRlclRvSFRNTFRyZWUiLCJfX3NldEZvbnRNZXRyaWNzIiwiX19kZWZpbmVTeW1ib2wiLCJfX2RlZmluZUZ1bmN0aW9uIiwiX19kZWZpbmVNYWNybyIsIl9fZG9tVHJlZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/katex/dist/katex.mjs\n");
 |