{"version":3,"file":"index.cjs","sources":["../../../constants/lib/builder-constants.ts","../../../util/lib/object-utils.ts","../../../../../node_modules/.pnpm/@handlebars+parser@2.2.0/node_modules/@handlebars/parser/dist/esm/exception.js","../../../../../node_modules/.pnpm/@handlebars+parser@2.2.0/node_modules/@handlebars/parser/dist/esm/parser.js","../../../../../node_modules/.pnpm/simple-html-tokenizer@0.5.11/node_modules/simple-html-tokenizer/dist/es6/index.js","../../../syntax/lib/source/loc/kinds.ts","../../../syntax/lib/v2/objects/constants.ts","../../lib/passes/1-normalization/visitors/constants.ts"],"sourcesContent":["/// Builder ///\n\nexport type BUILDER_LITERAL = 0;\nexport const BUILDER_LITERAL: BUILDER_LITERAL = 0;\n\nexport type BUILDER_COMMENT = 1;\nexport const BUILDER_COMMENT: BUILDER_COMMENT = 1;\n\nexport type BUILDER_APPEND = 2;\nexport const BUILDER_APPEND: BUILDER_APPEND = 2;\n\nexport type BUILDER_MODIFIER = 3;\nexport const BUILDER_MODIFIER: BUILDER_MODIFIER = 3;\n\nexport type BUILDER_DYNAMIC_COMPONENT = 4;\nexport const BUILDER_DYNAMIC_COMPONENT: BUILDER_DYNAMIC_COMPONENT = 4;\n\nexport type BUILDER_GET = 5;\nexport const BUILDER_GET: BUILDER_GET = 5;\n\nexport type BUILDER_CONCAT = 6;\nexport const BUILDER_CONCAT: BUILDER_CONCAT = 6;\n\nexport type BUILDER_HAS_BLOCK = 7;\nexport const BUILDER_HAS_BLOCK: BUILDER_HAS_BLOCK = 7;\n\nexport type BUILDER_HAS_BLOCK_PARAMS = 8;\nexport const BUILDER_HAS_BLOCK_PARAMS: BUILDER_HAS_BLOCK_PARAMS = 8;\n\n/// HeadKind ///\n\nexport type BLOCK_HEAD = 'Block';\nexport const BLOCK_HEAD: BLOCK_HEAD = 'Block';\n\nexport type CALL_HEAD = 'Call';\nexport const CALL_HEAD: CALL_HEAD = 'Call';\n\nexport type ELEMENT_HEAD = 'Element';\nexport const ELEMENT_HEAD: ELEMENT_HEAD = 'Element';\n\nexport type APPEND_PATH_HEAD = 'AppendPath';\nexport const APPEND_PATH_HEAD: APPEND_PATH_HEAD = 'AppendPath';\n\nexport type APPEND_EXPR_HEAD = 'AppendExpr';\nexport const APPEND_EXPR_HEAD: APPEND_EXPR_HEAD = 'AppendExpr';\n\nexport type LITERAL_HEAD = 'Literal';\nexport const LITERAL_HEAD: LITERAL_HEAD = 'Literal';\n\nexport type MODIFIER_HEAD = 'Modifier';\nexport const MODIFIER_HEAD: MODIFIER_HEAD = 'Modifier';\n\nexport type DYNAMIC_COMPONENT_HEAD = 'DynamicComponent';\nexport const DYNAMIC_COMPONENT_HEAD: DYNAMIC_COMPONENT_HEAD = 'DynamicComponent';\n\nexport type COMMENT_HEAD = 'Comment';\nexport const COMMENT_HEAD: COMMENT_HEAD = 'Comment';\n\nexport type SPLAT_HEAD = 'Splat';\nexport const SPLAT_HEAD: SPLAT_HEAD = 'Splat';\n\nexport type KEYWORD_HEAD = 'Keyword';\nexport const KEYWORD_HEAD: KEYWORD_HEAD = 'Keyword';\n\nexport type HeadKind =\n  | BLOCK_HEAD\n  | CALL_HEAD\n  | ELEMENT_HEAD\n  | APPEND_PATH_HEAD\n  | APPEND_EXPR_HEAD\n  | LITERAL_HEAD\n  | MODIFIER_HEAD\n  | DYNAMIC_COMPONENT_HEAD\n  | COMMENT_HEAD\n  | SPLAT_HEAD\n  | KEYWORD_HEAD;\n\n/// VariableKind ///\n\nexport type LOCAL_VAR = 'Local';\nexport const LOCAL_VAR: LOCAL_VAR = 'Local';\n\nexport type FREE_VAR = 'Free';\nexport const FREE_VAR: FREE_VAR = 'Free';\n\nexport type ARG_VAR = 'Arg';\nexport const ARG_VAR: ARG_VAR = 'Arg';\n\nexport type BLOCK_VAR = 'Block';\nexport const BLOCK_VAR: BLOCK_VAR = 'Block';\n\nexport type THIS_VAR = 'This';\nexport const THIS_VAR: THIS_VAR = 'This';\n\nexport type VariableKind = LOCAL_VAR | FREE_VAR | ARG_VAR | BLOCK_VAR | THIS_VAR;\n\n/// ExpressionKind ///\n\nexport type LITERAL_EXPR = 'Literal';\nexport const LITERAL_EXPR: LITERAL_EXPR = 'Literal';\n\nexport type CALL_EXPR = 'Call';\nexport const CALL_EXPR: CALL_EXPR = 'Call';\n\nexport type GET_PATH_EXPR = 'GetPath';\nexport const GET_PATH_EXPR: GET_PATH_EXPR = 'GetPath';\n\nexport type GET_VAR_EXPR = 'GetVar';\nexport const GET_VAR_EXPR: GET_VAR_EXPR = 'GetVar';\n\nexport type CONCAT_EXPR = 'Concat';\nexport const CONCAT_EXPR: CONCAT_EXPR = 'Concat';\n\nexport type HAS_BLOCK_EXPR = 'HasBlock';\nexport const HAS_BLOCK_EXPR: HAS_BLOCK_EXPR = 'HasBlock';\n\nexport type HAS_BLOCK_PARAMS_EXPR = 'HasBlockParams';\nexport const HAS_BLOCK_PARAMS_EXPR: HAS_BLOCK_PARAMS_EXPR = 'HasBlockParams';\n\nexport type ExpressionKind =\n  | LITERAL_EXPR\n  | CALL_EXPR\n  | GET_PATH_EXPR\n  | GET_VAR_EXPR\n  | CONCAT_EXPR\n  | HAS_BLOCK_EXPR\n  | HAS_BLOCK_PARAMS_EXPR;\n","export const assign = Object.assign;\n\nexport function values<T>(obj: { [s: string]: T }): T[] {\n  return Object.values(obj);\n}\n\nexport type ObjectEntry<D extends object> = { [P in keyof D]: [P, D[P]] }[keyof D];\n\nexport function entries<D extends object>(dict: D): ObjectEntry<D>[] {\n  return Object.entries(dict) as ObjectEntry<D>[];\n}\n\nexport function keys<T extends object>(obj: T): (keyof T)[] {\n  return Object.keys(obj) as (keyof T)[];\n}\n","var errorProps = [\n    'description',\n    'fileName',\n    'lineNumber',\n    'endLineNumber',\n    'message',\n    'name',\n    'number',\n    'stack'\n];\nfunction Exception(message, node) {\n    var loc = node && node.loc, line, endLineNumber, column, endColumn;\n    if (loc) {\n        line = loc.start.line;\n        endLineNumber = loc.end.line;\n        column = loc.start.column;\n        endColumn = loc.end.column;\n        message += ' - ' + line + ':' + column;\n    }\n    var tmp = Error.prototype.constructor.call(this, message);\n    // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n    for (var idx = 0; idx < errorProps.length; idx++) {\n        this[errorProps[idx]] = tmp[errorProps[idx]];\n    }\n    /* istanbul ignore else */\n    if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, Exception);\n    }\n    try {\n        if (loc) {\n            this.lineNumber = line;\n            this.endLineNumber = endLineNumber;\n            // Work around issue under safari where we can't directly set the column value\n            /* istanbul ignore next */\n            if (Object.defineProperty) {\n                Object.defineProperty(this, 'column', {\n                    value: column,\n                    enumerable: true\n                });\n                Object.defineProperty(this, 'endColumn', {\n                    value: endColumn,\n                    enumerable: true\n                });\n            }\n            else {\n                this.column = column;\n                this.endColumn = endColumn;\n            }\n        }\n    }\n    catch (nop) {\n        /* Ignore if the browser is very particular */\n    }\n}\nException.prototype = new Error();\nexport default Exception;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZXB0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFNLFVBQVUsR0FBRztJQUNqQixhQUFhO0lBQ2IsVUFBVTtJQUNWLFlBQVk7SUFDWixlQUFlO0lBQ2YsU0FBUztJQUNULE1BQU07SUFDTixRQUFRO0lBQ1IsT0FBTztDQUNSLENBQUM7QUFFRixTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSTtJQUM5QixJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFDeEIsSUFBSSxFQUNKLGFBQWEsRUFDYixNQUFNLEVBQ04sU0FBUyxDQUFDO0lBRVosSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNSLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN0QixhQUFhLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDN0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzFCLFNBQVMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUUzQixPQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTFELG1HQUFtRztJQUNuRyxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzVCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILElBQUksR0FBRyxFQUFFLENBQUM7WUFDUixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztZQUVuQyw4RUFBOEU7WUFDOUUsMEJBQTBCO1lBQzFCLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMxQixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7b0JBQ3BDLEtBQUssRUFBRSxNQUFNO29CQUNiLFVBQVUsRUFBRSxJQUFJO2lCQUNqQixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO29CQUN2QyxLQUFLLEVBQUUsU0FBUztvQkFDaEIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDN0IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLDhDQUE4QztJQUNoRCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUVsQyxlQUFlLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=","/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function () {\n    var o = function (k, v, o, l) { for (o = o || {}, l = k.length; l--; o[k[l]] = v)\n        ; return o; }, $V0 = [2, 52], $V1 = [1, 20], $V2 = [5, 14, 15, 19, 29, 34, 39, 44, 47, 48, 53, 57, 61], $V3 = [1, 44], $V4 = [1, 40], $V5 = [1, 43], $V6 = [1, 33], $V7 = [1, 34], $V8 = [1, 35], $V9 = [1, 36], $Va = [1, 37], $Vb = [1, 42], $Vc = [1, 46], $Vd = [14, 15, 19, 29, 34, 39, 44, 47, 48, 53, 57, 61], $Ve = [14, 15, 19, 29, 34, 44, 47, 48, 53, 57, 61], $Vf = [15, 18], $Vg = [14, 15, 19, 29, 34, 47, 48, 53, 57, 61], $Vh = [33, 67, 73, 75, 84, 85, 86, 87, 88, 89], $Vi = [23, 33, 56, 67, 68, 73, 75, 77, 79, 84, 85, 86, 87, 88, 89], $Vj = [1, 62], $Vk = [1, 63], $Vl = [23, 33, 56, 68, 73, 79], $Vm = [23, 33, 56, 67, 68, 73, 75, 77, 79, 84, 85, 86, 87, 88, 89, 92, 93], $Vn = [2, 51], $Vo = [1, 64], $Vp = [67, 73, 75, 77, 84, 85, 86, 87, 88, 89], $Vq = [56, 67, 73, 75, 84, 85, 86, 87, 88, 89], $Vr = [1, 75], $Vs = [1, 76], $Vt = [1, 83], $Vu = [33, 67, 73, 75, 79, 84, 85, 86, 87, 88, 89], $Vv = [23, 67, 73, 75, 84, 85, 86, 87, 88, 89], $Vw = [67, 68, 73, 75, 84, 85, 86, 87, 88, 89], $Vx = [33, 79], $Vy = [1, 134], $Vz = [73, 81];\n    var parser = { trace: function trace() { },\n        yy: {},\n        symbols_: { \"error\": 2, \"root\": 3, \"program\": 4, \"EOF\": 5, \"program_repetition0\": 6, \"statement\": 7, \"mustache\": 8, \"block\": 9, \"rawBlock\": 10, \"partial\": 11, \"partialBlock\": 12, \"content\": 13, \"COMMENT\": 14, \"CONTENT\": 15, \"openRawBlock\": 16, \"rawBlock_repetition0\": 17, \"END_RAW_BLOCK\": 18, \"OPEN_RAW_BLOCK\": 19, \"helperName\": 20, \"openRawBlock_repetition0\": 21, \"openRawBlock_option0\": 22, \"CLOSE_RAW_BLOCK\": 23, \"openBlock\": 24, \"block_option0\": 25, \"closeBlock\": 26, \"openInverse\": 27, \"block_option1\": 28, \"OPEN_BLOCK\": 29, \"openBlock_repetition0\": 30, \"openBlock_option0\": 31, \"openBlock_option1\": 32, \"CLOSE\": 33, \"OPEN_INVERSE\": 34, \"openInverse_repetition0\": 35, \"openInverse_option0\": 36, \"openInverse_option1\": 37, \"openInverseChain\": 38, \"OPEN_INVERSE_CHAIN\": 39, \"openInverseChain_repetition0\": 40, \"openInverseChain_option0\": 41, \"openInverseChain_option1\": 42, \"inverseAndProgram\": 43, \"INVERSE\": 44, \"inverseChain\": 45, \"inverseChain_option0\": 46, \"OPEN_ENDBLOCK\": 47, \"OPEN\": 48, \"hash\": 49, \"expr\": 50, \"mustache_repetition0\": 51, \"mustache_option0\": 52, \"OPEN_UNESCAPED\": 53, \"mustache_repetition1\": 54, \"mustache_option1\": 55, \"CLOSE_UNESCAPED\": 56, \"OPEN_PARTIAL\": 57, \"partial_repetition0\": 58, \"partial_option0\": 59, \"openPartialBlock\": 60, \"OPEN_PARTIAL_BLOCK\": 61, \"openPartialBlock_repetition0\": 62, \"openPartialBlock_option0\": 63, \"exprHead\": 64, \"arrayLiteral\": 65, \"sexpr\": 66, \"OPEN_SEXPR\": 67, \"CLOSE_SEXPR\": 68, \"sexpr_repetition0\": 69, \"sexpr_option0\": 70, \"hash_repetition_plus0\": 71, \"hashSegment\": 72, \"ID\": 73, \"EQUALS\": 74, \"OPEN_ARRAY\": 75, \"arrayLiteral_repetition0\": 76, \"CLOSE_ARRAY\": 77, \"blockParams\": 78, \"OPEN_BLOCK_PARAMS\": 79, \"blockParams_repetition_plus0\": 80, \"CLOSE_BLOCK_PARAMS\": 81, \"path\": 82, \"dataName\": 83, \"STRING\": 84, \"NUMBER\": 85, \"BOOLEAN\": 86, \"UNDEFINED\": 87, \"NULL\": 88, \"DATA\": 89, \"pathSegments\": 90, \"sep\": 91, \"SEP\": 92, \"PRIVATE_SEP\": 93, \"$accept\": 0, \"$end\": 1 },\n        terminals_: { 2: \"error\", 5: \"EOF\", 14: \"COMMENT\", 15: \"CONTENT\", 18: \"END_RAW_BLOCK\", 19: \"OPEN_RAW_BLOCK\", 23: \"CLOSE_RAW_BLOCK\", 29: \"OPEN_BLOCK\", 33: \"CLOSE\", 34: \"OPEN_INVERSE\", 39: \"OPEN_INVERSE_CHAIN\", 44: \"INVERSE\", 47: \"OPEN_ENDBLOCK\", 48: \"OPEN\", 53: \"OPEN_UNESCAPED\", 56: \"CLOSE_UNESCAPED\", 57: \"OPEN_PARTIAL\", 61: \"OPEN_PARTIAL_BLOCK\", 67: \"OPEN_SEXPR\", 68: \"CLOSE_SEXPR\", 73: \"ID\", 74: \"EQUALS\", 75: \"OPEN_ARRAY\", 77: \"CLOSE_ARRAY\", 79: \"OPEN_BLOCK_PARAMS\", 81: \"CLOSE_BLOCK_PARAMS\", 84: \"STRING\", 85: \"NUMBER\", 86: \"BOOLEAN\", 87: \"UNDEFINED\", 88: \"NULL\", 89: \"DATA\", 92: \"SEP\", 93: \"PRIVATE_SEP\" },\n        productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 3], [8, 5], [8, 5], [11, 5], [12, 3], [60, 5], [50, 1], [50, 1], [64, 1], [64, 1], [66, 3], [66, 5], [49, 1], [72, 3], [65, 3], [78, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [83, 2], [91, 1], [91, 1], [82, 3], [82, 1], [90, 3], [90, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [51, 0], [51, 2], [52, 0], [52, 1], [54, 0], [54, 2], [55, 0], [55, 1], [58, 0], [58, 2], [59, 0], [59, 1], [62, 0], [62, 2], [63, 0], [63, 1], [69, 0], [69, 2], [70, 0], [70, 1], [71, 1], [71, 2], [76, 0], [76, 2], [80, 1], [80, 2]],\n        performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n            /* this == yyval */\n            var $0 = $$.length - 1;\n            switch (yystate) {\n                case 1:\n                    return $$[$0 - 1];\n                    break;\n                case 2:\n                    this.$ = yy.prepareProgram($$[$0]);\n                    break;\n                case 3:\n                case 4:\n                case 5:\n                case 6:\n                case 7:\n                case 8:\n                case 20:\n                case 28:\n                case 29:\n                case 30:\n                case 31:\n                case 38:\n                case 39:\n                case 46:\n                case 47:\n                    this.$ = $$[$0];\n                    break;\n                case 9:\n                    this.$ = {\n                        type: 'CommentStatement',\n                        value: yy.stripComment($$[$0]),\n                        strip: yy.stripFlags($$[$0], $$[$0]),\n                        loc: yy.locInfo(this._$)\n                    };\n                    break;\n                case 10:\n                    this.$ = {\n                        type: 'ContentStatement',\n                        original: $$[$0],\n                        value: $$[$0],\n                        loc: yy.locInfo(this._$)\n                    };\n                    break;\n                case 11:\n                    this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n                    break;\n                case 12:\n                    this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] };\n                    break;\n                case 13:\n                    this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);\n                    break;\n                case 14:\n                    this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);\n                    break;\n                case 15:\n                    this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n                    break;\n                case 16:\n                case 17:\n                    this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n                    break;\n                case 18:\n                    this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] };\n                    break;\n                case 19:\n                    var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$), program = yy.prepareProgram([inverse], $$[$0 - 1].loc);\n                    program.chained = true;\n                    this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true };\n                    break;\n                case 21:\n                    this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) };\n                    break;\n                case 22:\n                    this.$ = yy.prepareMustache(yy.syntax.hash($$[$0 - 1], yy.locInfo(this._$), { yy: yy, syntax: 'expr' }), [], undefined, $$[$0 - 2], yy.stripFlags($$[$0 - 2], $$[$0]), this._$);\n                    break;\n                case 23:\n                case 24:\n                    this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n                    break;\n                case 25:\n                    this.$ = {\n                        type: 'PartialStatement',\n                        name: $$[$0 - 3],\n                        params: $$[$0 - 2],\n                        hash: $$[$0 - 1],\n                        indent: '',\n                        strip: yy.stripFlags($$[$0 - 4], $$[$0]),\n                        loc: yy.locInfo(this._$)\n                    };\n                    break;\n                case 26:\n                    this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n                    break;\n                case 27:\n                    this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) };\n                    break;\n                case 32:\n                    this.$ = yy.syntax.hash($$[$0 - 1], yy.locInfo(this._$), { yy: yy, syntax: 'expr' });\n                    break;\n                case 33:\n                    this.$ = {\n                        type: 'SubExpression',\n                        path: $$[$0 - 3],\n                        params: $$[$0 - 2],\n                        hash: $$[$0 - 1],\n                        loc: yy.locInfo(this._$)\n                    };\n                    break;\n                case 34:\n                    this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) };\n                    break;\n                case 35:\n                    this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) };\n                    break;\n                case 36:\n                    this.$ = yy.syntax.square($$[$0 - 1], yy.locInfo(this._$), { yy: yy, syntax: 'expr' });\n                    break;\n                case 37:\n                    this.$ = yy.id($$[$0 - 1]);\n                    break;\n                case 40:\n                    this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) };\n                    break;\n                case 41:\n                    this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) };\n                    break;\n                case 42:\n                    this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) };\n                    break;\n                case 43:\n                    this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) };\n                    break;\n                case 44:\n                    this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) };\n                    break;\n                case 45:\n                    this.$ = yy.preparePath(true, false, $$[$0], this._$);\n                    break;\n                case 48:\n                    this.$ = yy.preparePath(false, $$[$0 - 2], $$[$0], this._$);\n                    break;\n                case 49:\n                    this.$ = yy.preparePath(false, false, $$[$0], this._$);\n                    break;\n                case 50:\n                    $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });\n                    this.$ = $$[$0 - 2];\n                    break;\n                case 51:\n                    this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }];\n                    break;\n                case 52:\n                case 54:\n                case 56:\n                case 64:\n                case 70:\n                case 76:\n                case 84:\n                case 88:\n                case 92:\n                case 96:\n                case 100:\n                case 106:\n                    this.$ = [];\n                    break;\n                case 53:\n                case 55:\n                case 57:\n                case 65:\n                case 71:\n                case 77:\n                case 85:\n                case 89:\n                case 93:\n                case 97:\n                case 101:\n                case 105:\n                case 107:\n                case 109:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n                case 104:\n                case 108:\n                    this.$ = [$$[$0]];\n                    break;\n            }\n        },\n        table: [o([5, 14, 15, 19, 29, 34, 48, 53, 57, 61], $V0, { 3: 1, 4: 2, 6: 3 }), { 1: [3] }, { 5: [1, 4] }, o([5, 39, 44, 47], [2, 2], { 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 24: 15, 27: 16, 16: 17, 60: 19, 14: [1, 12], 15: $V1, 19: [1, 23], 29: [1, 21], 34: [1, 22], 48: [1, 13], 53: [1, 14], 57: [1, 18], 61: [1, 24] }), { 1: [2, 1] }, o($V2, [2, 53]), o($V2, [2, 3]), o($V2, [2, 4]), o($V2, [2, 5]), o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 8]), o($V2, [2, 9]), { 20: 28, 49: 25, 50: 26, 64: 29, 65: 38, 66: 39, 67: $V3, 71: 27, 72: 30, 73: $V4, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, { 20: 28, 50: 45, 64: 29, 65: 38, 66: 39, 67: $V3, 73: $Vc, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, o($Vd, $V0, { 6: 3, 4: 47 }), o($Ve, $V0, { 6: 3, 4: 48 }), o($Vf, [2, 54], { 17: 49 }), { 20: 28, 50: 50, 64: 29, 65: 38, 66: 39, 67: $V3, 73: $Vc, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, o($Vg, $V0, { 6: 3, 4: 51 }), o([5, 14, 15, 18, 19, 29, 34, 39, 44, 47, 48, 53, 57, 61], [2, 10]), { 20: 52, 64: 53, 65: 38, 66: 39, 67: $V3, 73: $Vc, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, { 20: 54, 64: 53, 65: 38, 66: 39, 67: $V3, 73: $Vc, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, { 20: 55, 64: 53, 65: 38, 66: 39, 67: $V3, 73: $Vc, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, { 20: 28, 50: 56, 64: 29, 65: 38, 66: 39, 67: $V3, 73: $Vc, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, { 33: [1, 57] }, o($Vh, [2, 84], { 51: 58 }), o([23, 33, 56, 68, 79], [2, 34], { 72: 59, 73: [1, 60] }), o($Vi, [2, 28]), o($Vi, [2, 29], { 91: 61, 92: $Vj, 93: $Vk }), o($Vl, [2, 104]), o($Vi, [2, 38]), o($Vi, [2, 39]), o($Vi, [2, 40]), o($Vi, [2, 41]), o($Vi, [2, 42]), o($Vi, [2, 43]), o($Vi, [2, 44]), o($Vm, [2, 30]), o($Vm, [2, 31]), o([23, 33, 56, 67, 68, 73, 75, 79, 84, 85, 86, 87, 88, 89, 92, 93], $Vn, { 74: $Vo }), o($Vi, [2, 49], { 91: 65, 92: $Vj, 93: $Vk }), { 73: $Vc, 90: 66 }, o($Vp, [2, 106], { 76: 67 }), { 20: 28, 49: 68, 50: 69, 64: 29, 65: 38, 66: 39, 67: $V3, 71: 27, 72: 30, 73: $V4, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, o($Vq, [2, 88], { 54: 70 }), o($Vm, $Vn), { 25: 71, 38: 73, 39: $Vr, 43: 74, 44: $Vs, 45: 72, 47: [2, 60] }, { 28: 77, 43: 78, 44: $Vs, 47: [2, 62] }, { 13: 80, 15: $V1, 18: [1, 79] }, o($Vh, [2, 92], { 58: 81 }), { 26: 82, 47: $Vt }, o($Vu, [2, 64], { 30: 84 }), { 91: 61, 92: $Vj, 93: $Vk }, o($Vu, [2, 70], { 35: 85 }), o($Vv, [2, 56], { 21: 86 }), o($Vh, [2, 96], { 62: 87 }), o($V2, [2, 22]), { 20: 28, 33: [2, 86], 49: 90, 50: 89, 52: 88, 64: 29, 65: 38, 66: 39, 67: $V3, 71: 27, 72: 30, 73: $V4, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, o($Vl, [2, 105]), { 74: $Vo }, { 73: $Vc, 90: 91 }, { 73: [2, 46] }, { 73: [2, 47] }, { 20: 28, 50: 92, 64: 29, 65: 38, 66: 39, 67: $V3, 73: $Vc, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, { 73: [1, 93] }, o($Vi, [2, 45], { 91: 65, 92: $Vj, 93: $Vk }), { 20: 28, 50: 95, 64: 29, 65: 38, 66: 39, 67: $V3, 73: $Vc, 75: $V5, 77: [1, 94], 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, { 68: [1, 96] }, o($Vw, [2, 100], { 69: 97 }), { 20: 28, 49: 100, 50: 99, 55: 98, 56: [2, 90], 64: 29, 65: 38, 66: 39, 67: $V3, 71: 27, 72: 30, 73: $V4, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, { 26: 101, 47: $Vt }, { 47: [2, 61] }, o($Vd, $V0, { 6: 3, 4: 102 }), { 47: [2, 20] }, { 20: 103, 64: 53, 65: 38, 66: 39, 67: $V3, 73: $Vc, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, o($Vg, $V0, { 6: 3, 4: 104 }), { 26: 105, 47: $Vt }, { 47: [2, 63] }, o($V2, [2, 11]), o($Vf, [2, 55]), { 20: 28, 33: [2, 94], 49: 108, 50: 107, 59: 106, 64: 29, 65: 38, 66: 39, 67: $V3, 71: 27, 72: 30, 73: $V4, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, o($V2, [2, 26]), { 20: 109, 64: 53, 65: 38, 66: 39, 67: $V3, 73: $Vc, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, o($Vx, [2, 66], { 71: 27, 20: 28, 64: 29, 72: 30, 82: 31, 83: 32, 65: 38, 66: 39, 90: 41, 31: 110, 50: 111, 49: 112, 67: $V3, 73: $V4, 75: $V5, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb }), o($Vx, [2, 72], { 71: 27, 20: 28, 64: 29, 72: 30, 82: 31, 83: 32, 65: 38, 66: 39, 90: 41, 36: 113, 50: 114, 49: 115, 67: $V3, 73: $V4, 75: $V5, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb }), { 20: 28, 22: 116, 23: [2, 58], 49: 118, 50: 117, 64: 29, 65: 38, 66: 39, 67: $V3, 71: 27, 72: 30, 73: $V4, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, { 20: 28, 33: [2, 98], 49: 121, 50: 120, 63: 119, 64: 29, 65: 38, 66: 39, 67: $V3, 71: 27, 72: 30, 73: $V4, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, { 33: [1, 122] }, o($Vh, [2, 85]), { 33: [2, 87] }, o($Vi, [2, 48], { 91: 65, 92: $Vj, 93: $Vk }), o($Vl, [2, 35]), o($Vm, [2, 50]), o($Vm, [2, 36]), o($Vp, [2, 107]), o($Vm, [2, 32]), { 20: 28, 49: 125, 50: 124, 64: 29, 65: 38, 66: 39, 67: $V3, 68: [2, 102], 70: 123, 71: 27, 72: 30, 73: $V4, 75: $V5, 82: 31, 83: 32, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb, 90: 41 }, { 56: [1, 126] }, o($Vq, [2, 89]), { 56: [2, 91] }, o($V2, [2, 13]), { 38: 73, 39: $Vr, 43: 74, 44: $Vs, 45: 128, 46: 127, 47: [2, 82] }, o($Vu, [2, 76], { 40: 129 }), { 47: [2, 18] }, o($V2, [2, 14]), { 33: [1, 130] }, o($Vh, [2, 93]), { 33: [2, 95] }, { 33: [1, 131] }, { 32: 132, 33: [2, 68], 78: 133, 79: $Vy }, o($Vu, [2, 65]), o($Vx, [2, 67]), { 33: [2, 74], 37: 135, 78: 136, 79: $Vy }, o($Vu, [2, 71]), o($Vx, [2, 73]), { 23: [1, 137] }, o($Vv, [2, 57]), { 23: [2, 59] }, { 33: [1, 138] }, o($Vh, [2, 97]), { 33: [2, 99] }, o($V2, [2, 23]), { 68: [1, 139] }, o($Vw, [2, 101]), { 68: [2, 103] }, o($V2, [2, 24]), { 47: [2, 19] }, { 47: [2, 83] }, o($Vx, [2, 78], { 71: 27, 20: 28, 64: 29, 72: 30, 82: 31, 83: 32, 65: 38, 66: 39, 90: 41, 41: 140, 50: 141, 49: 142, 67: $V3, 73: $V4, 75: $V5, 84: $V6, 85: $V7, 86: $V8, 87: $V9, 88: $Va, 89: $Vb }), o($V2, [2, 25]), o($V2, [2, 21]), { 33: [1, 143] }, { 33: [2, 69] }, { 73: [1, 145], 80: 144 }, { 33: [1, 146] }, { 33: [2, 75] }, o($Vf, [2, 12]), o($Vg, [2, 27]), o($Vm, [2, 33]), { 33: [2, 80], 42: 147, 78: 148, 79: $Vy }, o($Vu, [2, 77]), o($Vx, [2, 79]), o($Vd, [2, 15]), { 73: [1, 150], 81: [1, 149] }, o($Vz, [2, 108]), o($Ve, [2, 16]), { 33: [1, 151] }, { 33: [2, 81] }, { 33: [2, 37] }, o($Vz, [2, 109]), o($Vd, [2, 17])],\n        defaultActions: { 4: [2, 1], 62: [2, 46], 63: [2, 47], 72: [2, 61], 74: [2, 20], 78: [2, 63], 90: [2, 87], 100: [2, 91], 104: [2, 18], 108: [2, 95], 118: [2, 59], 121: [2, 99], 125: [2, 103], 127: [2, 19], 128: [2, 83], 133: [2, 69], 136: [2, 75], 148: [2, 81], 149: [2, 37] },\n        parseError: function parseError(str, hash) {\n            if (hash.recoverable) {\n                this.trace(str);\n            }\n            else {\n                var error = new Error(str);\n                error.hash = hash;\n                throw error;\n            }\n        },\n        parse: function parse(input) {\n            var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n            var args = lstack.slice.call(arguments, 1);\n            var lexer = Object.create(this.lexer);\n            var sharedState = { yy: {} };\n            for (var k in this.yy) {\n                if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n                    sharedState.yy[k] = this.yy[k];\n                }\n            }\n            lexer.setInput(input, sharedState.yy);\n            sharedState.yy.lexer = lexer;\n            sharedState.yy.parser = this;\n            if (typeof lexer.yylloc == 'undefined') {\n                lexer.yylloc = {};\n            }\n            var yyloc = lexer.yylloc;\n            lstack.push(yyloc);\n            var ranges = lexer.options && lexer.options.ranges;\n            if (typeof sharedState.yy.parseError === 'function') {\n                this.parseError = sharedState.yy.parseError;\n            }\n            else {\n                this.parseError = Object.getPrototypeOf(this).parseError;\n            }\n            function popStack(n) {\n                stack.length = stack.length - 2 * n;\n                vstack.length = vstack.length - n;\n                lstack.length = lstack.length - n;\n            }\n            _token_stack: var lex = function () {\n                var token;\n                token = lexer.lex() || EOF;\n                if (typeof token !== 'number') {\n                    token = self.symbols_[token] || token;\n                }\n                return token;\n            };\n            var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n            while (true) {\n                state = stack[stack.length - 1];\n                if (this.defaultActions[state]) {\n                    action = this.defaultActions[state];\n                }\n                else {\n                    if (symbol === null || typeof symbol == 'undefined') {\n                        symbol = lex();\n                    }\n                    action = table[state] && table[state][symbol];\n                }\n                if (typeof action === 'undefined' || !action.length || !action[0]) {\n                    var errStr = '';\n                    expected = [];\n                    for (p in table[state]) {\n                        if (this.terminals_[p] && p > TERROR) {\n                            expected.push('\\'' + this.terminals_[p] + '\\'');\n                        }\n                    }\n                    if (lexer.showPosition) {\n                        errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n                    }\n                    else {\n                        errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n                    }\n                    this.parseError(errStr, {\n                        text: lexer.match,\n                        token: this.terminals_[symbol] || symbol,\n                        line: lexer.yylineno,\n                        loc: yyloc,\n                        expected: expected\n                    });\n                }\n                if (action[0] instanceof Array && action.length > 1) {\n                    throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n                }\n                switch (action[0]) {\n                    case 1:\n                        stack.push(symbol);\n                        vstack.push(lexer.yytext);\n                        lstack.push(lexer.yylloc);\n                        stack.push(action[1]);\n                        symbol = null;\n                        if (!preErrorSymbol) {\n                            yyleng = lexer.yyleng;\n                            yytext = lexer.yytext;\n                            yylineno = lexer.yylineno;\n                            yyloc = lexer.yylloc;\n                            if (recovering > 0) {\n                                recovering--;\n                            }\n                        }\n                        else {\n                            symbol = preErrorSymbol;\n                            preErrorSymbol = null;\n                        }\n                        break;\n                    case 2:\n                        len = this.productions_[action[1]][1];\n                        yyval.$ = vstack[vstack.length - len];\n                        yyval._$ = {\n                            first_line: lstack[lstack.length - (len || 1)].first_line,\n                            last_line: lstack[lstack.length - 1].last_line,\n                            first_column: lstack[lstack.length - (len || 1)].first_column,\n                            last_column: lstack[lstack.length - 1].last_column\n                        };\n                        if (ranges) {\n                            yyval._$.range = [\n                                lstack[lstack.length - (len || 1)].range[0],\n                                lstack[lstack.length - 1].range[1]\n                            ];\n                        }\n                        r = this.performAction.apply(yyval, [\n                            yytext,\n                            yyleng,\n                            yylineno,\n                            sharedState.yy,\n                            action[1],\n                            vstack,\n                            lstack\n                        ].concat(args));\n                        if (typeof r !== 'undefined') {\n                            return r;\n                        }\n                        if (len) {\n                            stack = stack.slice(0, -1 * len * 2);\n                            vstack = vstack.slice(0, -1 * len);\n                            lstack = lstack.slice(0, -1 * len);\n                        }\n                        stack.push(this.productions_[action[1]][0]);\n                        vstack.push(yyval.$);\n                        lstack.push(yyval._$);\n                        newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n                        stack.push(newState);\n                        break;\n                    case 3:\n                        return true;\n                }\n            }\n            return true;\n        } };\n    /* generated by jison-lex 0.3.4 */\n    var lexer = (function () {\n        var lexer = ({\n            EOF: 1,\n            parseError: function parseError(str, hash) {\n                if (this.yy.parser) {\n                    this.yy.parser.parseError(str, hash);\n                }\n                else {\n                    throw new Error(str);\n                }\n            },\n            // resets the lexer, sets new input\n            setInput: function (input, yy) {\n                this.yy = yy || this.yy || {};\n                this._input = input;\n                this._more = this._backtrack = this.done = false;\n                this.yylineno = this.yyleng = 0;\n                this.yytext = this.matched = this.match = '';\n                this.conditionStack = ['INITIAL'];\n                this.yylloc = {\n                    first_line: 1,\n                    first_column: 0,\n                    last_line: 1,\n                    last_column: 0\n                };\n                if (this.options.ranges) {\n                    this.yylloc.range = [0, 0];\n                }\n                this.offset = 0;\n                return this;\n            },\n            // consumes and returns one char from the input\n            input: function () {\n                var ch = this._input[0];\n                this.yytext += ch;\n                this.yyleng++;\n                this.offset++;\n                this.match += ch;\n                this.matched += ch;\n                var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n                if (lines) {\n                    this.yylineno++;\n                    this.yylloc.last_line++;\n                }\n                else {\n                    this.yylloc.last_column++;\n                }\n                if (this.options.ranges) {\n                    this.yylloc.range[1]++;\n                }\n                this._input = this._input.slice(1);\n                return ch;\n            },\n            // unshifts one char (or a string) into the input\n            unput: function (ch) {\n                var len = ch.length;\n                var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n                this._input = ch + this._input;\n                this.yytext = this.yytext.substr(0, this.yytext.length - len);\n                //this.yyleng -= len;\n                this.offset -= len;\n                var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n                this.match = this.match.substr(0, this.match.length - 1);\n                this.matched = this.matched.substr(0, this.matched.length - 1);\n                if (lines.length - 1) {\n                    this.yylineno -= lines.length - 1;\n                }\n                var r = this.yylloc.range;\n                this.yylloc = {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.yylineno + 1,\n                    first_column: this.yylloc.first_column,\n                    last_column: lines ?\n                        (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                            + oldLines[oldLines.length - lines.length].length - lines[0].length :\n                        this.yylloc.first_column - len\n                };\n                if (this.options.ranges) {\n                    this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n                }\n                this.yyleng = this.yytext.length;\n                return this;\n            },\n            // When called from action, caches matched text and appends it on next action\n            more: function () {\n                this._more = true;\n                return this;\n            },\n            // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n            reject: function () {\n                if (this.options.backtrack_lexer) {\n                    this._backtrack = true;\n                }\n                else {\n                    return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n                        text: \"\",\n                        token: null,\n                        line: this.yylineno\n                    });\n                }\n                return this;\n            },\n            // retain first n characters of the match\n            less: function (n) {\n                this.unput(this.match.slice(n));\n            },\n            // displays already matched input, i.e. for error messages\n            pastInput: function () {\n                var past = this.matched.substr(0, this.matched.length - this.match.length);\n                return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n            },\n            // displays upcoming input, i.e. for error messages\n            upcomingInput: function () {\n                var next = this.match;\n                if (next.length < 20) {\n                    next += this._input.substr(0, 20 - next.length);\n                }\n                return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n            },\n            // displays the character position where the lexing error occurred, i.e. for error messages\n            showPosition: function () {\n                var pre = this.pastInput();\n                var c = new Array(pre.length + 1).join(\"-\");\n                return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n            },\n            // test the lexed token: return FALSE when not a match, otherwise return token\n            test_match: function (match, indexed_rule) {\n                var token, lines, backup;\n                if (this.options.backtrack_lexer) {\n                    // save context\n                    backup = {\n                        yylineno: this.yylineno,\n                        yylloc: {\n                            first_line: this.yylloc.first_line,\n                            last_line: this.last_line,\n                            first_column: this.yylloc.first_column,\n                            last_column: this.yylloc.last_column\n                        },\n                        yytext: this.yytext,\n                        match: this.match,\n                        matches: this.matches,\n                        matched: this.matched,\n                        yyleng: this.yyleng,\n                        offset: this.offset,\n                        _more: this._more,\n                        _input: this._input,\n                        yy: this.yy,\n                        conditionStack: this.conditionStack.slice(0),\n                        done: this.done\n                    };\n                    if (this.options.ranges) {\n                        backup.yylloc.range = this.yylloc.range.slice(0);\n                    }\n                }\n                lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n                if (lines) {\n                    this.yylineno += lines.length;\n                }\n                this.yylloc = {\n                    first_line: this.yylloc.last_line,\n                    last_line: this.yylineno + 1,\n                    first_column: this.yylloc.last_column,\n                    last_column: lines ?\n                        lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                        this.yylloc.last_column + match[0].length\n                };\n                this.yytext += match[0];\n                this.match += match[0];\n                this.matches = match;\n                this.yyleng = this.yytext.length;\n                if (this.options.ranges) {\n                    this.yylloc.range = [this.offset, this.offset += this.yyleng];\n                }\n                this._more = false;\n                this._backtrack = false;\n                this._input = this._input.slice(match[0].length);\n                this.matched += match[0];\n                token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n                if (this.done && this._input) {\n                    this.done = false;\n                }\n                if (token) {\n                    return token;\n                }\n                else if (this._backtrack) {\n                    // recover context\n                    for (var k in backup) {\n                        this[k] = backup[k];\n                    }\n                    return false; // rule action called reject() implying the next rule should be tested instead.\n                }\n                return false;\n            },\n            // return next match in input\n            next: function () {\n                if (this.done) {\n                    return this.EOF;\n                }\n                if (!this._input) {\n                    this.done = true;\n                }\n                var token, match, tempMatch, index;\n                if (!this._more) {\n                    this.yytext = '';\n                    this.match = '';\n                }\n                var rules = this._currentRules();\n                for (var i = 0; i < rules.length; i++) {\n                    tempMatch = this._input.match(this.rules[rules[i]]);\n                    if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                        match = tempMatch;\n                        index = i;\n                        if (this.options.backtrack_lexer) {\n                            token = this.test_match(tempMatch, rules[i]);\n                            if (token !== false) {\n                                return token;\n                            }\n                            else if (this._backtrack) {\n                                match = false;\n                                continue; // rule action called reject() implying a rule MISmatch.\n                            }\n                            else {\n                                // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                                return false;\n                            }\n                        }\n                        else if (!this.options.flex) {\n                            break;\n                        }\n                    }\n                }\n                if (match) {\n                    token = this.test_match(match, rules[index]);\n                    if (token !== false) {\n                        return token;\n                    }\n                    // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                    return false;\n                }\n                if (this._input === \"\") {\n                    return this.EOF;\n                }\n                else {\n                    return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                        text: \"\",\n                        token: null,\n                        line: this.yylineno\n                    });\n                }\n            },\n            // return next match that has a token\n            lex: function lex() {\n                var r = this.next();\n                if (r) {\n                    return r;\n                }\n                else {\n                    return this.lex();\n                }\n            },\n            // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n            begin: function begin(condition) {\n                this.conditionStack.push(condition);\n            },\n            // pop the previously active lexer condition state off the condition stack\n            popState: function popState() {\n                var n = this.conditionStack.length - 1;\n                if (n > 0) {\n                    return this.conditionStack.pop();\n                }\n                else {\n                    return this.conditionStack[0];\n                }\n            },\n            // produce the lexer rule set which is active for the currently active lexer condition state\n            _currentRules: function _currentRules() {\n                if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n                    return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n                }\n                else {\n                    return this.conditions[\"INITIAL\"].rules;\n                }\n            },\n            // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n            topState: function topState(n) {\n                n = this.conditionStack.length - 1 - Math.abs(n || 0);\n                if (n >= 0) {\n                    return this.conditionStack[n];\n                }\n                else {\n                    return \"INITIAL\";\n                }\n            },\n            // alias for begin(condition)\n            pushState: function pushState(condition) {\n                this.begin(condition);\n            },\n            // return the number of states currently on the stack\n            stateStackSize: function stateStackSize() {\n                return this.conditionStack.length;\n            },\n            options: {},\n            performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n                function strip(start, end) {\n                    return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n                }\n                var YYSTATE = YY_START;\n                switch ($avoiding_name_collisions) {\n                    case 0:\n                        if (yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n                            strip(0, 1);\n                            this.begin(\"mu\");\n                        }\n                        else if (yy_.yytext.slice(-1) === \"\\\\\") {\n                            strip(0, 1);\n                            this.begin(\"emu\");\n                        }\n                        else {\n                            this.begin(\"mu\");\n                        }\n                        if (yy_.yytext)\n                            return 15;\n                        break;\n                    case 1:\n                        return 15;\n                        break;\n                    case 2:\n                        this.popState();\n                        return 15;\n                        break;\n                    case 3:\n                        this.begin('raw');\n                        return 15;\n                        break;\n                    case 4:\n                        this.popState();\n                        // Should be using `this.topState()` below, but it currently\n                        // returns the second top instead of the first top. Opened an\n                        // issue about it at https://github.com/zaach/jison/issues/291\n                        if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {\n                            return 15;\n                        }\n                        else {\n                            strip(5, 9);\n                            return 18;\n                        }\n                        break;\n                    case 5:\n                        return 15;\n                        break;\n                    case 6:\n                        this.popState();\n                        return 14;\n                        break;\n                    case 7:\n                        return 67;\n                        break;\n                    case 8:\n                        return 68;\n                        break;\n                    case 9:\n                        if (yy.syntax.square === 'string') {\n                            this.unput(yy_.yytext);\n                            // escaped literal\n                            this.begin('escl');\n                        }\n                        else {\n                            return 75;\n                        }\n                        break;\n                    case 10:\n                        return 77;\n                        break;\n                    case 11:\n                        return 19;\n                        break;\n                    case 12:\n                        this.popState();\n                        this.begin('raw');\n                        return 23;\n                        break;\n                    case 13:\n                        return 57;\n                        break;\n                    case 14:\n                        return 61;\n                        break;\n                    case 15:\n                        return 29;\n                        break;\n                    case 16:\n                        return 47;\n                        break;\n                    case 17:\n                        this.popState();\n                        return 44;\n                        break;\n                    case 18:\n                        this.popState();\n                        return 44;\n                        break;\n                    case 19:\n                        return 34;\n                        break;\n                    case 20:\n                        return 39;\n                        break;\n                    case 21:\n                        return 53;\n                        break;\n                    case 22:\n                        return 48;\n                        break;\n                    case 23:\n                        this.unput(yy_.yytext);\n                        this.popState();\n                        this.begin('com');\n                        break;\n                    case 24:\n                        this.popState();\n                        return 14;\n                        break;\n                    case 25:\n                        return 48;\n                        break;\n                    case 26:\n                        return 74;\n                        break;\n                    case 27:\n                        return 73;\n                        break;\n                    case 28:\n                        return 73;\n                        break;\n                    case 29:\n                        return 93;\n                        break;\n                    case 30:\n                        return 92;\n                        break;\n                    case 31: // ignore whitespace\n                        break;\n                    case 32:\n                        this.popState();\n                        return 56;\n                        break;\n                    case 33:\n                        this.popState();\n                        return 33;\n                        break;\n                    case 34:\n                        yy_.yytext = strip(1, 2).replace(/\\\\\"/g, '\"');\n                        return 84;\n                        break;\n                    case 35:\n                        yy_.yytext = strip(1, 2).replace(/\\\\'/g, \"'\");\n                        return 84;\n                        break;\n                    case 36:\n                        return 89;\n                        break;\n                    case 37:\n                        return 86;\n                        break;\n                    case 38:\n                        return 86;\n                        break;\n                    case 39:\n                        return 87;\n                        break;\n                    case 40:\n                        return 88;\n                        break;\n                    case 41:\n                        return 85;\n                        break;\n                    case 42:\n                        return 79;\n                        break;\n                    case 43:\n                        return 81;\n                        break;\n                    case 44:\n                        return 73;\n                        break;\n                    case 45:\n                        yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g, '$1');\n                        this.popState();\n                        return 73;\n                        break;\n                    case 46:\n                        return 'INVALID';\n                        break;\n                    case 47:\n                        return 5;\n                        break;\n                }\n            },\n            rules: [/^(?:[^\\x00]*?(?=(\\{\\{)))/, /^(?:[^\\x00]+)/, /^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/, /^(?:\\{\\{\\{\\{(?=[^/]))/, /^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/, /^(?:[^\\x00]+?(?=(\\{\\{\\{\\{)))/, /^(?:[\\s\\S]*?--(~)?\\}\\})/, /^(?:\\()/, /^(?:\\))/, /^(?:\\[)/, /^(?:\\])/, /^(?:\\{\\{\\{\\{)/, /^(?:\\}\\}\\}\\})/, /^(?:\\{\\{(~)?>)/, /^(?:\\{\\{(~)?#>)/, /^(?:\\{\\{(~)?#\\*?)/, /^(?:\\{\\{(~)?\\/)/, /^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\^)/, /^(?:\\{\\{(~)?\\s*else\\b)/, /^(?:\\{\\{(~)?\\{)/, /^(?:\\{\\{(~)?&)/, /^(?:\\{\\{(~)?!--)/, /^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/, /^(?:\\{\\{(~)?\\*?)/, /^(?:=)/, /^(?:\\.\\.)/, /^(?:\\.(?=([=~}\\s\\/.)\\]|])))/, /^(?:\\.#)/, /^(?:[\\/.])/, /^(?:\\s+)/, /^(?:\\}(~)?\\}\\})/, /^(?:(~)?\\}\\})/, /^(?:\"(\\\\[\"]|[^\"])*\")/, /^(?:'(\\\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\\s)\\]])))/, /^(?:false(?=([~}\\s)\\]])))/, /^(?:undefined(?=([~}\\s)\\]])))/, /^(?:null(?=([~}\\s)\\]])))/, /^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)\\]])))/, /^(?:as\\s+\\|)/, /^(?:\\|)/, /^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)\\]|]))))/, /^(?:\\[(\\\\\\]|[^\\]])*\\])/, /^(?:.)/, /^(?:$)/],\n            conditions: { \"mu\": { \"rules\": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47], \"inclusive\": false }, \"emu\": { \"rules\": [2], \"inclusive\": false }, \"com\": { \"rules\": [6], \"inclusive\": false }, \"raw\": { \"rules\": [3, 4, 5], \"inclusive\": false }, \"escl\": { \"rules\": [45], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 47], \"inclusive\": true } }\n        });\n        return lexer;\n    })();\n    parser.lexer = lexer;\n    function Parser() {\n        this.yy = {};\n    }\n    Parser.prototype = parser;\n    parser.Parser = Parser;\n    return new Parser;\n})();\nexport default parser;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3BhcnNlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQ0FBc0M7QUFDdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUVFO0FBQ0YsSUFBSSxNQUFNLEdBQUcsQ0FBQztJQUNkLElBQUksQ0FBQyxHQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLEtBQUksQ0FBQyxHQUFDLENBQUMsSUFBRSxFQUFFLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUM7UUFBQyxDQUFDLENBQUEsT0FBTyxDQUFDLENBQUEsQ0FBQSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEdBQUcsR0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsQ0FBQztJQUN6MEIsSUFBSSxNQUFNLEdBQUcsRUFBQyxLQUFLLEVBQUUsU0FBUyxLQUFLLEtBQU0sQ0FBQztRQUMxQyxFQUFFLEVBQUUsRUFBRTtRQUNOLFFBQVEsRUFBRSxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsc0JBQXNCLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsMEJBQTBCLEVBQUMsRUFBRSxFQUFDLHNCQUFz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QUFTLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBQyxnQkFBZ0IsRUFBQyxFQUFFLEVBQUMsaUJBQWlCLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsb0JBQW9CLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyxhQUFhLEVBQUMsRUFBRSxFQUFDLG1CQUFtQixFQUFDLEVBQUUsRUFBQyxvQkFBb0IsRUFBQyxFQUFFLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUMsS0FBSyxFQUFDLEVBQUUsRUFBQyxhQUFhLEVBQUM7UUFDOWhCLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBQyxDQUFD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QUcsSUFBSSxDQUFDO29CQUV2QixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO29CQUV0RSxNQUFNO2dCQUNOLEtBQUssRUFBRTtvQkFDUCxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDO29CQUNsRSxNQUFNO2dCQUNOLEtBQUssRUFBRTtvQkFDUCxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBQSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN0SyxNQUFNO2dCQUNOLEtBQUssRUFBRSxDQUFDO2dCQUFDLEtBQUssRUFBRTtvQkFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxD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RUFBRSxDQUFDO2dCQUFDLEtBQUssR0FBRyxDQUFDO2dCQUFDLEtBQUssR0FBRztvQkFDNUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ1osTUFBTTtnQkFDTixLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxLQUFLLEdBQUcsQ0FBQztnQkFBQyxLQUFLLEdBQUcsQ0FBQztnQkFBQyxLQUFLLEdBQUcsQ0FBQztnQkFBQyxLQUFLLEdBQUc7b0JBQ2hJLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0QixNQUFNO2dCQUNOLEtBQUssR0FBRyxDQUFDO2dCQUFDLEtBQUssR0FBRztvQkFDbEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNsQixNQUFNO1lBQ04sQ0FBQztRQUNELENBQUM7UUFDRCxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFtSyxjQUFjLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFD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LDJDQUEyQyxFQUFDLGNBQWMsRUFBQyxTQUFTLEVBQUMsMkRBQTJELEVBQUMsd0JBQXdCLEVBQUMsUUFBUSxFQUFDLFFBQVEsQ0FBQztZQUN2aUMsVUFBVSxFQUFFLEVBQUMsSUFBSSxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLEtBQUssRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxLQUFLLEVBQUMsRUFBQyxLQUFLLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxXQUFXLEVBQUMsS0FBSyxFQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxXQUFXLEVBQUMsS0FBSyxFQUFDLEVBQUMsTUFBTSxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLFNBQVMsRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLElBQUksRUFBQyxFQUFDO1NBQ2hYLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNMLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLFNBQVMsTUFBTTtRQUNiLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUNELE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0lBQUEsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDakQsT0FBTyxJQUFJLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUMsRUFBRSxDQUFDO0FBQUEsZUFBZSxNQUFNLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBwYXJzZXIgZ2VuZXJhdGVkIGJ5IGppc29uIDAuNC4xOCAqL1xuLypcbiAgUmV0dXJucyBhIFBhcnNlciBvYmplY3Qgb2YgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG5cbiAgUGFyc2VyOiB7XG4gICAgeXk6IHt9XG4gIH1cblxuICBQYXJzZXIucHJvdG90eXBlOiB7XG4gICAgeXk6IHt9LFxuICAgIHRyYWNlOiBmdW5jdGlvbigpLFxuICAgIHN5bWJvbHNfOiB7YXNzb2NpYXRpdmUgbGlzdDogbmFtZSA9PT4gbnVtYmVyfSxcbiAgICB0ZXJtaW5hbHNfOiB7YXNzb2NpYXRpdmUgbGlzdDogbnVtYmVyID09PiBuYW1lfSxcbiAgICBwcm9kdWN0aW9uc186IFsuLi5dLFxuICAgIHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHl5LCB5eXN0YXRlLCAkJCwgXyQpLFxuICAgIHRhYmxlOiBbLi4uXSxcbiAgICBkZWZhdWx0QWN0aW9uczogey4uLn0sXG4gICAgcGFyc2VFcnJvcjogZnVuY3Rpb24oc3RyLCBoYXNoKSxcbiAgICBwYXJzZTogZnVuY3Rpb24oaW5wdXQpLFxuXG4gICAgbGV4ZXI6IHtcbiAgICAgICAgRU9GOiAxLFxuICAgICAgICBwYXJzZUVycm9yOiBmdW5jdGlvbihzdHIsIGhhc2gpLFxuICAgICAgICBzZXRJbnB1dDogZnVuY3Rpb24oaW5wdXQpLFxuICAgICAgICBpbnB1dDogZnVuY3Rpb24oKSxcbiAgICAgICAgdW5wdXQ6IGZ1bmN0aW9uKHN0ciksXG4gICAgICAgIG1vcmU6IGZ1bmN0aW9uKCksXG4gICAgICAgIGxlc3M6IGZ1bmN0aW9uKG4pLFxuICAgICAgICBwYXN0SW5wdXQ6IGZ1bmN0aW9uKCksXG4gICAgICAgIHVwY29taW5nSW5wdXQ6IGZ1bmN0aW9uKCksXG4gICAgICAgIHNob3dQb3NpdGlvbjogZnVuY3Rpb24oKSxcbiAgICAgICAgdGVzdF9tYXRjaDogZnVuY3Rpb24ocmVnZXhfbWF0Y2hfYXJyYXksIHJ1bGVfaW5kZXgpLFxuICAgICAgICBuZXh0OiBmdW5jdGlvbigpLFxuICAgICAgICBsZXg6IGZ1bmN0aW9uKCksXG4gICAgICAgIGJlZ2luOiBmdW5jdGlvbihjb25kaXRpb24pLFxuICAgICAgICBwb3BTdGF0ZTogZnVuY3Rpb24oKSxcbiAgICAgICAgX2N1cnJlbnRSdWxlczogZnVuY3Rpb24oKSxcbiAgICAgICAgdG9wU3RhdGU6IGZ1bmN0aW9uKCksXG4gICAgICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24oY29uZGl0aW9uKSxcblxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICByYW5nZXM6IGJvb2xlYW4gICAgICAgICAgIChvcHRpb25hbDogdHJ1ZSA9PT4gdG9rZW4gbG9jYXRpb24gaW5mbyB3aWxsIGluY2x1ZGUgYSAucmFuZ2VbXSBtZW1iZXIpXG4gICAgICAgICAgICBmbGV4OiBib29sZWFuICAgICAgICAgICAgIChvcHRpb25hbDogdHJ1ZSA9PT4gZmxleC1saWtlIGxleGluZyBiZWhhdmlvdXIgd2hlcmUgdGhlIHJ1bGVzIGFyZSB0ZXN0ZWQgZXhoYXVzdGl2ZWx5IHRvIGZpbmQgdGhlIGxvbmdlc3QgbWF0Y2gpXG4gICAgICAgICAgICBiYWNrdHJhY2tfbGV4ZXI6IGJvb2xlYW4gIChvcHRpb25hbDogdHJ1ZSA9PT4gbGV4ZXIgcmVnZXhlcyBhcmUgdGVzdGVkIGluIG9yZGVyIGFuZCBmb3IgZWFjaCBtYXRjaGluZyByZWdleCB0aGUgYWN0aW9uIGNvZGUgaXMgaW52b2tlZDsgdGhlIGxleGVyIHRlcm1pbmF0ZXMgdGhlIHNjYW4gd2hlbiBhIHRva2VuIGlzIHJldHVybmVkIGJ5IHRoZSBhY3Rpb24gY29kZSlcbiAgICAgICAgfSxcblxuICAgICAgICBwZXJmb3JtQWN0aW9uOiBmdW5jdGlvbih5eSwgeXlfLCAkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLCBZWV9TVEFSVCksXG4gICAgICAgIHJ1bGVzOiBbLi4uXSxcbiAgICAgICAgY29uZGl0aW9uczoge2Fzc29jaWF0aXZlIGxpc3Q6IG5hbWUgPT0+IHNldH0sXG4gICAgfVxuICB9XG5cblxuICB0b2tlbiBsb2NhdGlvbiBpbmZvIChAJCwgXyQsIGV0Yy4pOiB7XG4gICAgZmlyc3RfbGluZTogbixcbiAgICBsYXN0X2xpbmU6IG4sXG4gICAgZmlyc3RfY29sdW1uOiBuLFxuICAgIGxhc3RfY29sdW1uOiBuLFxuICAgIHJhbmdlOiBbc3RhcnRfbnVtYmVyLCBlbmRfbnVtYmVyXSAgICAgICAod2hlcmUgdGhlIG51bWJlcnMgYXJlIGluZGV4ZXMgaW50byB0aGUgaW5wdXQgc3RyaW5nLCByZWd1bGFyIHplcm8tYmFzZWQpXG4gIH1cblxuXG4gIHRoZSBwYXJzZUVycm9yIGZ1bmN0aW9uIHJlY2VpdmVzIGEgJ2hhc2gnIG9iamVjdCB3aXRoIHRoZXNlIG1lbWJlcnMgZm9yIGxleGVyIGFuZCBwYXJzZXIgZXJyb3JzOiB7XG4gICAgdGV4dDogICAgICAgIChtYXRjaGVkIHRleHQpXG4gICAgdG9rZW46ICAgICAgICh0aGUgcHJvZHVjZWQgdGVybWluYWwgdG9rZW4sIGlmIGFueSlcbiAgICBsaW5lOiAgICAgICAgKHl5bGluZW5vKVxuICB9XG4gIHdoaWxlIHBhcnNlciAoZ3JhbW1hcikgZXJyb3JzIHdpbGwgYWxzbyBwcm92aWRlIHRoZXNlIG1lbWJlcnMsIGkuZS4gcGFyc2VyIGVycm9ycyBkZWxpdmVyIGEgc3VwZXJzZXQgb2YgYXR0cmlidXRlczoge1xuICAgIGxvYzogICAgICAgICAoeXlsbG9jKVxuICAgIGV4cGVjdGVkOiAgICAoc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHNldCBvZiBleHBlY3RlZCB0b2tlbnMpXG4gICAgcmVjb3ZlcmFibGU6IChib29sZWFuOiBUUlVFIHdoZW4gdGhlIHBhcnNlciBoYXMgYSBlcnJvciByZWNvdmVyeSBydWxlIGF2YWlsYWJsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGVycm9yKVxuICB9XG4qL1xudmFyIHBhcnNlciA9IChmdW5jdGlvbigpe1xudmFyIG89ZnVuY3Rpb24oayx2LG8sbCl7Zm9yKG89b3x8e30sbD1rLmxlbmd0aDtsLS07b1trW2xdXT12KTtyZXR1cm4gb30sJFYwPVsyLDUyXSwkVjE9WzEsMjBdLCRWMj1bNSwxNCwxNSwxOSwyOSwzNCwzOSw0NCw0Nyw0OCw1Myw1Nyw2MV0sJFYzPVsxLDQ0XSwkVjQ9WzEsNDBdLCRWNT1bMSw0M10sJFY2PVsxLDMzXSwkVjc9WzEsMzRdLCRWOD1bMSwzNV0sJFY5PVsxLDM2XSwkVmE9WzEsMzddLCRWYj1bMSw0Ml0sJFZjPVsxLDQ2XSwkVmQ9WzE0LDE1LDE5LDI5LDM0LDM5LDQ0LDQ3LDQ4LDUzLDU3LDYxXSwkVmU9WzE0LDE1LDE5LDI5LDM0LDQ0LDQ3LDQ4LDUzLDU3LDYxXSwkVmY9WzE1LDE4XSwkVmc9WzE0LDE1LDE5LDI5LDM0LDQ3LDQ4LDUzLDU3LDYxXSwkVmg9WzMzLDY3LDczLDc1LDg0LDg1LDg2LDg3LDg4LDg5XSwkVmk9WzIzLDMzLDU2LDY3LDY4LDczLDc1LDc3LDc5LDg0LDg1LDg2LDg3LDg4LDg5XSwkVmo9WzEsNjJdLCRWaz1bMSw2M10sJFZsPVsyMywzMyw1Niw2OCw3Myw3OV0sJFZtPVsyMywzMyw1Niw2Nyw2OCw3Myw3NSw3Nyw3OSw4NCw4NSw4Niw4Nyw4OCw4OSw5Miw5M10sJFZuPVsyLDUxXSwkVm89WzEsNjRdLCRWcD1bNjcsNzMsNzUsNzcsODQsODUsODYsODcsODgsODldLCRWcT1bNTYsNjcsNzMsNzUsODQsODUsODYsODcsODgsODldLCRWcj1bMSw3NV0sJFZzPVsxLDc2XSwkVnQ9WzEsODNdLCRWdT1bMzMsNjcsNzMsNzUsNzksODQsODUsODYsODcsODgsODldLCRWdj1bMjMsNjcsNzMsNzUsODQsODUsODYsODcsODgsODldLCRWdz1bNjcsNjgsNzMsNzUsODQsODUsODYsODcsODgsODldLCRWeD1bMzMsNzldLCRWeT1bMSwxMzRdLCRWej1bNzMsODFdO1xudmFyIHBhcnNlciA9IHt0cmFjZTogZnVuY3Rpb24gdHJhY2UgKCkgeyB9LFxueXk6IHt9LFxuc3ltYm9sc186IHtcImVycm9yXCI6MixcInJvb3RcIjozLFwicHJvZ3JhbVwiOjQsXCJFT0ZcIjo1LFwicHJvZ3JhbV9yZXBldGl0aW9uMFwiOjYsXCJzdGF0ZW1lbnRcIjo3LFwibXVzdGFjaGVcIjo4LFwiYmxvY2tcIjo5LFwicmF3QmxvY2tcIjoxMCxcInBhcnRpYWxcIjoxMSxcInBhcnRpYWxCbG9ja1wiOjEyLFwiY29udGVudFwiOjEzLFwiQ09NTUVOVFwiOjE0LFwiQ09OVEVOVFwiOjE1LFwib3BlblJhd0Jsb2NrXCI6MTYsXCJyYXdCbG9ja19yZXBldGl0aW9uMFwiOjE3LFwiRU5EX1JBV19CTE9DS1wiOjE4LFwiT1BFTl9SQVdfQkxPQ0tcIjoxOSxcImhlbHBlck5hbWVcIjoyMCxcIm9wZW5SYXdCbG9ja19yZXBldGl0aW9uMFwiOjIxLFwib3BlblJhd0Jsb2NrX29wdGlvbjBcIjoyMixcIkNMT1NFX1JBV19CTE9DS1wiOjIzLFwib3BlbkJsb2NrXCI6MjQsXCJibG9ja19vcHRpb24wXCI6MjUsXCJjbG9zZUJsb2NrXCI6MjYsXCJvcGVuSW52ZXJzZVwiOjI3LFwiYmxvY2tfb3B0aW9uMVwiOjI4LFwiT1BFTl9CTE9DS1wiOjI5LFwib3BlbkJsb2NrX3JlcGV0aXRpb24wXCI6MzAsXCJvcGVuQmxvY2tfb3B0aW9uMFwiOjMxLFwib3BlbkJsb2NrX29wdGlvbjFcIjozMixcIkNMT1NFXCI6MzMsXCJPUEVOX0lOVkVSU0VcIjozNCxcIm9wZW5JbnZlcnNlX3JlcGV0aXRpb24wXCI6MzUsXCJvcGVuSW52ZXJzZV9vcHRpb24wXCI6MzYsXCJvcGVuSW52ZXJzZV9vcHRpb24xXCI6MzcsXCJvcGVuSW52ZXJzZUNoYWluXCI6MzgsXCJPUEVOX0lOVkVSU0VfQ0hBSU5cIjozOSxcIm9wZW5JbnZlcnNlQ2hhaW5fcmVwZXRpdGlvbjBcIjo0MCxcIm9wZW5JbnZlcnNlQ2hhaW5fb3B0aW9uMFwiOjQxLFwib3BlbkludmVyc2VDaGFpbl9vcHRpb24xXCI6NDIsXCJpbnZlcnNlQW5kUHJvZ3JhbVwiOjQzLFwiSU5WRVJTRVwiOjQ0LFwiaW52ZXJzZUNoYWluXCI6NDUsXCJpbnZlcnNlQ2hhaW5fb3B0aW9uMFwiOjQ2LFwiT1BFTl9FTkRCTE9DS1wiOjQ3LFwiT1BFTlwiOjQ4LFwiaGFzaFwiOjQ5LFwiZXhwclwiOjUwLFwibXVzdGFjaGVfcmVwZXRpdGlvbjBcIjo1MSxcIm11c3RhY2hlX29wdGlvbjBcIjo1MixcIk9QRU5fVU5FU0NBUEVEXCI6NTMsXCJtdXN0YWNoZV9yZXBldGl0aW9uMVwiOjU0LFwibXVzdGFjaGVfb3B0aW9uMVwiOjU1LFwiQ0xPU0VfVU5FU0NBUEVEXCI6NTYsXCJPUEVOX1BBUlRJQUxcIjo1NyxcInBhcnRpYWxfcmVwZXRpdGlvbjBcIjo1OCxcInBhcnRpYWxfb3B0aW9uMFwiOjU5LFwib3BlblBhcnRpYWxCbG9ja1wiOjYwLFwiT1BFTl9QQVJUSUFMX0JMT0NLXCI6NjEsXCJvcGVuUGFydGlhbEJsb2NrX3JlcGV0aXRpb24wXCI6NjIsXCJvcGVuUGFydGlhbEJsb2NrX29wdGlvbjBcIjo2MyxcImV4cHJIZWFkXCI6NjQsXCJhcnJheUxpdGVyYWxcIjo2NSxcInNleHByXCI6NjYsXCJPUEVOX1NFWFBSXCI6NjcsXCJDTE9TRV9TRVhQUlwiOjY4LFwic2V4cHJfcmVwZXRpdGlvbjBcIjo2OSxcInNleHByX29wdGlvbjBcIjo3MCxcImhhc2hfcmVwZXRpdGlvbl9wbHVzMFwiOjcxLFwiaGFzaFNlZ21lbnRcIjo3MixcIklEXCI6NzMsXCJFUVVBTFNcIjo3NCxcIk9QRU5fQVJSQVlcIjo3NSxcImFycmF5TGl0ZXJhbF9yZXBldGl0aW9uMFwiOjc2LFwiQ0xPU0VfQVJSQVlcIjo3NyxcImJsb2NrUGFyYW1zXCI6NzgsXCJPUEVOX0JMT0NLX1BBUkFNU1wiOjc5LFwiYmxvY2tQYXJhbXNfcmVwZXRpdGlvbl9wbHVzMFwiOjgwLFwiQ0xPU0VfQkxPQ0tfUEFSQU1TXCI6ODEsXCJwYXRoXCI6ODIsXCJkYXRhTmFtZVwiOjgzLFwiU1RSSU5HXCI6ODQsXCJOVU1CRVJcIjo4NSxcIkJPT0xFQU5cIjo4NixcIlVOREVGSU5FRFwiOjg3LFwiTlVMTFwiOjg4LFwiREFUQVwiOjg5LFwicGF0aFNlZ21lbnRzXCI6OTAsXCJzZXBcIjo5MSxcIlNFUFwiOjkyLFwiUFJJVkFURV9TRVBcIjo5MyxcIiRhY2NlcHRcIjowLFwiJGVuZFwiOjF9LFxudGVybWluYWxzXzogezI6XCJlcnJvclwiLDU6XCJFT0ZcIiwxNDpcIkNPTU1FTlRcIiwxNTpcIkNPTlRFTlRcIiwxODpcIkVORF9SQVdfQkxPQ0tcIiwxOTpcIk9QRU5fUkFXX0JMT0NLXCIsMjM6XCJDTE9TRV9SQVdfQkxPQ0tcIiwyOTpcIk9QRU5fQkxPQ0tcIiwzMzpcIkNMT1NFXCIsMzQ6XCJPUEVOX0lOVkVSU0VcIiwzOTpcIk9QRU5fSU5WRVJTRV9DSEFJTlwiLDQ0OlwiSU5WRVJTRVwiLDQ3OlwiT1BFTl9FTkRCTE9DS1wiLDQ4OlwiT1BFTlwiLDUzOlwiT1BFTl9VTkVTQ0FQRURcIiw1NjpcIkNMT1NFX1VORVNDQVBFRFwiLDU3OlwiT1BFTl9QQVJUSUFMXCIsNjE6XCJPUEVOX1BBUlRJQUxfQkxPQ0tcIiw2NzpcIk9QRU5fU0VYUFJcIiw2ODpcIkNMT1NFX1NFWFBSXCIsNzM6XCJJRFwiLDc0OlwiRVFVQUxTXCIsNzU6XCJPUEVOX0FSUkFZXCIsNzc6XCJDTE9TRV9BUlJBWVwiLDc5OlwiT1BFTl9CTE9DS19QQVJBTVNcIiw4MTpcIkNMT1NFX0JMT0NLX1BBUkFNU1wiLDg0OlwiU1RSSU5HXCIsODU6XCJOVU1CRVJcIiw4NjpcIkJPT0xFQU5cIiw4NzpcIlVOREVGSU5FRFwiLDg4OlwiTlVMTFwiLDg5OlwiREFUQVwiLDkyOlwiU0VQXCIsOTM6XCJQUklWQVRFX1NFUFwifSxcbnByb2R1Y3Rpb25zXzogWzAsWzMsMl0sWzQsMV0sWzcsMV0sWzcsMV0sWzcsMV0sWzcsMV0sWzcsMV0sWzcsMV0sWzcsMV0sWzEzLDFdLFsxMCwzXSxbMTYsNV0sWzksNF0sWzksNF0sWzI0LDZdLFsyNyw2XSxbMzgsNl0sWzQzLDJdLFs0NSwzXSxbNDUsMV0sWzI2LDNdLFs4LDNdLFs4LDVdLFs4LDVdLFsxMSw1XSxbMTIsM10sWzYwLDVdLFs1MCwxXSxbNTAsMV0sWzY0LDFdLFs2NCwxXSxbNjYsM10sWzY2LDVdLFs0OSwxXSxbNzIsM10sWzY1LDNdLFs3OCwzXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzgzLDJdLFs5MSwxXSxbOTEsMV0sWzgyLDNdLFs4MiwxXSxbOTAsM10sWzkwLDFdLFs2LDBdLFs2LDJdLFsxNywwXSxbMTcsMl0sWzIxLDBdLFsyMSwyXSxbMjIsMF0sWzIyLDFdLFsyNSwwXSxbMjUsMV0sWzI4LDBdLFsyOCwxXSxbMzAsMF0sWzMwLDJdLFszMSwwXSxbMzEsMV0sWzMyLDBdLFszMiwxXSxbMzUsMF0sWzM1LDJdLFszNiwwXSxbMzYsMV0sWzM3LDBdLFszNywxXSxbNDAsMF0sWzQwLDJdLFs0MSwwXSxbNDEsMV0sWzQyLDBdLFs0MiwxXSxbNDYsMF0sWzQ2LDFdLFs1MSwwXSxbNTEsMl0sWzUyLDBdLFs1MiwxXSxbNTQsMF0sWzU0LDJdLFs1NSwwXSxbNTUsMV0sWzU4LDBdLFs1OCwyXSxbNTksMF0sWzU5LDFdLFs2MiwwXSxbNjIsMl0sWzYzLDBdLFs2MywxXSxbNjksMF0sWzY5LDJdLFs3MCwwXSxbNzAsMV0sWzcxLDFdLFs3MSwyXSxbNzYsMF0sWzc2LDJdLFs4MCwxXSxbODAsMl1dLFxucGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgeXksIHl5c3RhdGUgLyogYWN0aW9uWzFdICovLCAkJCAvKiB2c3RhY2sgKi8sIF8kIC8qIGxzdGFjayAqLykge1xuLyogdGhpcyA9PSB5eXZhbCAqL1xuXG52YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuc3dpdGNoICh5eXN0YXRlKSB7XG5jYXNlIDE6XG4gcmV0dXJuICQkWyQwLTFdOyBcbmJyZWFrO1xuY2FzZSAyOlxudGhpcy4kID0geXkucHJlcGFyZVByb2dyYW0oJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSAzOiBjYXNlIDQ6IGNhc2UgNTogY2FzZSA2OiBjYXNlIDc6IGNhc2UgODogY2FzZSAyMDogY2FzZSAyODogY2FzZSAyOTogY2FzZSAzMDogY2FzZSAzMTogY2FzZSAzODogY2FzZSAzOTogY2FzZSA0NjogY2FzZSA0NzpcbnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA5OlxuXG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbW1lbnRTdGF0ZW1lbnQnLFxuICAgICAgdmFsdWU6IHl5LnN0cmlwQ29tbWVudCgkJFskMF0pLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDBdLCAkJFskMF0pLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMTA6XG5cbiAgICB0aGlzLiQgPSB7XG4gICAgICB0eXBlOiAnQ29udGVudFN0YXRlbWVudCcsXG4gICAgICBvcmlnaW5hbDogJCRbJDBdLFxuICAgICAgdmFsdWU6ICQkWyQwXSxcbiAgICAgIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKVxuICAgIH07XG4gIFxuYnJlYWs7XG5jYXNlIDExOlxudGhpcy4kID0geXkucHJlcGFyZVJhd0Jsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAxMjpcbnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtM10sIHBhcmFtczogJCRbJDAtMl0sIGhhc2g6ICQkWyQwLTFdIH07XG5icmVhaztcbmNhc2UgMTM6XG50aGlzLiQgPSB5eS5wcmVwYXJlQmxvY2soJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCBmYWxzZSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMTQ6XG50aGlzLiQgPSB5eS5wcmVwYXJlQmxvY2soJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0cnVlLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAxNTpcbnRoaXMuJCA9IHsgb3BlbjogJCRbJDAtNV0sIHBhdGg6ICQkWyQwLTRdLCBwYXJhbXM6ICQkWyQwLTNdLCBoYXNoOiAkJFskMC0yXSwgYmxvY2tQYXJhbXM6ICQkWyQwLTFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC01XSwgJCRbJDBdKSB9O1xuYnJlYWs7XG5jYXNlIDE2OiBjYXNlIDE3OlxudGhpcy4kID0geyBwYXRoOiAkJFskMC00XSwgcGFyYW1zOiAkJFskMC0zXSwgaGFzaDogJCRbJDAtMl0sIGJsb2NrUGFyYW1zOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNV0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAxODpcbnRoaXMuJCA9IHsgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtMV0sICQkWyQwLTFdKSwgcHJvZ3JhbTogJCRbJDBdIH07XG5icmVhaztcbmNhc2UgMTk6XG5cbiAgICB2YXIgaW52ZXJzZSA9IHl5LnByZXBhcmVCbG9jaygkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgJCRbJDBdLCBmYWxzZSwgdGhpcy5fJCksXG4gICAgICAgIHByb2dyYW0gPSB5eS5wcmVwYXJlUHJvZ3JhbShbaW52ZXJzZV0sICQkWyQwLTFdLmxvYyk7XG4gICAgcHJvZ3JhbS5jaGFpbmVkID0gdHJ1ZTtcblxuICAgIHRoaXMuJCA9IHsgc3RyaXA6ICQkWyQwLTJdLnN0cmlwLCBwcm9ncmFtOiBwcm9ncmFtLCBjaGFpbjogdHJ1ZSB9O1xuICBcbmJyZWFrO1xuY2FzZSAyMTpcbnRoaXMuJCA9IHtwYXRoOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtMl0sICQkWyQwXSl9O1xuYnJlYWs7XG5jYXNlIDIyOlxudGhpcy4kID0geXkucHJlcGFyZU11c3RhY2hlKHl5LnN5bnRheC5oYXNoKCQkWyQwLTFdLCB5eS5sb2NJbmZvKHRoaXMuXyQpLCB7IHl5LCBzeW50YXg6ICdleHByJyB9KSwgW10sIHVuZGVmaW5lZCwgJCRbJDAtMl0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAtMl0sICQkWyQwXSksIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDIzOiBjYXNlIDI0OlxudGhpcy4kID0geXkucHJlcGFyZU11c3RhY2hlKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwLTRdLCB5eS5zdHJpcEZsYWdzKCQkWyQwLTRdLCAkJFskMF0pLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAyNTpcblxuICAgIHRoaXMuJCA9IHtcbiAgICAgIHR5cGU6ICdQYXJ0aWFsU3RhdGVtZW50JyxcbiAgICAgIG5hbWU6ICQkWyQwLTNdLFxuICAgICAgcGFyYW1zOiAkJFskMC0yXSxcbiAgICAgIGhhc2g6ICQkWyQwLTFdLFxuICAgICAgaW5kZW50OiAnJyxcbiAgICAgIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTRdLCAkJFskMF0pLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMjY6XG50aGlzLiQgPSB5eS5wcmVwYXJlUGFydGlhbEJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAyNzpcbnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtM10sIHBhcmFtczogJCRbJDAtMl0sIGhhc2g6ICQkWyQwLTFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSB9O1xuYnJlYWs7XG5jYXNlIDMyOlxudGhpcy4kID0geXkuc3ludGF4Lmhhc2goJCRbJDAtMV0sIHl5LmxvY0luZm8odGhpcy5fJCksIHsgeXksIHN5bnRheDogJ2V4cHInIH0pO1xuYnJlYWs7XG5jYXNlIDMzOlxuXG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ1N1YkV4cHJlc3Npb24nLFxuICAgICAgcGF0aDogJCRbJDAtM10sXG4gICAgICBwYXJhbXM6ICQkWyQwLTJdLFxuICAgICAgaGFzaDogJCRbJDAtMV0sXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAzNDpcbnRoaXMuJCA9IHt0eXBlOiAnSGFzaCcsIHBhaXJzOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzU6XG50aGlzLiQgPSB7dHlwZTogJ0hhc2hQYWlyJywga2V5OiB5eS5pZCgkJFskMC0yXSksIHZhbHVlOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzY6XG50aGlzLiQgPSB5eS5zeW50YXguc3F1YXJlKCQkWyQwLTFdLCB5eS5sb2NJbmZvKHRoaXMuXyQpLCB7IHl5LCBzeW50YXg6ICdleHByJyB9KTtcbmJyZWFrO1xuY2FzZSAzNzpcbnRoaXMuJCA9IHl5LmlkKCQkWyQwLTFdKTtcbmJyZWFrO1xuY2FzZSA0MDpcbnRoaXMuJCA9IHt0eXBlOiAnU3RyaW5nTGl0ZXJhbCcsIHZhbHVlOiAkJFskMF0sIG9yaWdpbmFsOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgNDE6XG50aGlzLiQgPSB7dHlwZTogJ051bWJlckxpdGVyYWwnLCB2YWx1ZTogTnVtYmVyKCQkWyQwXSksIG9yaWdpbmFsOiBOdW1iZXIoJCRbJDBdKSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSA0MjpcbnRoaXMuJCA9IHt0eXBlOiAnQm9vbGVhbkxpdGVyYWwnLCB2YWx1ZTogJCRbJDBdID09PSAndHJ1ZScsIG9yaWdpbmFsOiAkJFskMF0gPT09ICd0cnVlJywgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSA0MzpcbnRoaXMuJCA9IHt0eXBlOiAnVW5kZWZpbmVkTGl0ZXJhbCcsIG9yaWdpbmFsOiB1bmRlZmluZWQsIHZhbHVlOiB1bmRlZmluZWQsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgNDQ6XG50aGlzLiQgPSB7dHlwZTogJ051bGxMaXRlcmFsJywgb3JpZ2luYWw6IG51bGwsIHZhbHVlOiBudWxsLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDQ1OlxudGhpcy4kID0geXkucHJlcGFyZVBhdGgodHJ1ZSwgZmFsc2UsICQkWyQwXSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgNDg6XG50aGlzLiQgPSB5eS5wcmVwYXJlUGF0aChmYWxzZSwgJCRbJDAtMl0sICQkWyQwXSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgNDk6XG50aGlzLiQgPSB5eS5wcmVwYXJlUGF0aChmYWxzZSwgZmFsc2UsICQkWyQwXSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgNTA6XG4gJCRbJDAtMl0ucHVzaCh7cGFydDogeXkuaWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXSwgc2VwYXJhdG9yOiAkJFskMC0xXX0pOyB0aGlzLiQgPSAkJFskMC0yXTsgXG5icmVhaztcbmNhc2UgNTE6XG50aGlzLiQgPSBbe3BhcnQ6IHl5LmlkKCQkWyQwXSksIG9yaWdpbmFsOiAkJFskMF19XTtcbmJyZWFrO1xuY2FzZSA1MjogY2FzZSA1NDogY2FzZSA1NjogY2FzZSA2NDogY2FzZSA3MDogY2FzZSA3NjogY2FzZSA4NDogY2FzZSA4ODogY2FzZSA5MjogY2FzZSA5NjogY2FzZSAxMDA6IGNhc2UgMTA2OlxudGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNTM6IGNhc2UgNTU6IGNhc2UgNTc6IGNhc2UgNjU6IGNhc2UgNzE6IGNhc2UgNzc6IGNhc2UgODU6IGNhc2UgODk6IGNhc2UgOTM6IGNhc2UgOTc6IGNhc2UgMTAxOiBjYXNlIDEwNTogY2FzZSAxMDc6IGNhc2UgMTA5OlxuJCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDEwNDogY2FzZSAxMDg6XG50aGlzLiQgPSBbJCRbJDBdXTtcbmJyZWFrO1xufVxufSxcbnRhYmxlOiBbbyhbNSwxNCwxNSwxOSwyOSwzNCw0OCw1Myw1Nyw2MV0sJFYwLHszOjEsNDoyLDY6M30pLHsxOlszXX0sezU6WzEsNF19LG8oWzUsMzksNDQsNDddLFsyLDJdLHs3OjUsODo2LDk6NywxMDo4LDExOjksMTI6MTAsMTM6MTEsMjQ6MTUsMjc6MTYsMTY6MTcsNjA6MTksMTQ6WzEsMTJdLDE1OiRWMSwxOTpbMSwyM10sMjk6WzEsMjFdLDM0OlsxLDIyXSw0ODpbMSwxM10sNTM6WzEsMTRdLDU3OlsxLDE4XSw2MTpbMSwyNF19KSx7MTpbMiwxXX0sbygkVjIsWzIsNTNdKSxvKCRWMixbMiwzXSksbygkVjIsWzIsNF0pLG8oJFYyLFsyLDVdKSxvKCRWMixbMiw2XSksbygkVjIsWzIsN10pLG8oJFYyLFsyLDhdKSxvKCRWMixbMiw5XSksezIwOjI4LDQ5OjI1LDUwOjI2LDY0OjI5LDY1OjM4LDY2OjM5LDY3OiRWMyw3MToyNyw3MjozMCw3MzokVjQsNzU6JFY1LDgyOjMxLDgzOjMyLDg0OiRWNiw4NTokVjcsODY6JFY4LDg3OiRWOSw4ODokVmEsODk6JFZiLDkwOjQxfSx7MjA6MjgsNTA6NDUsNjQ6MjksNjU6MzgsNjY6MzksNjc6JFYzLDczOiRWYyw3NTokVjUsODI6MzEsODM6MzIsODQ6JFY2LDg1OiRWNyw4NjokVjgsODc6JFY5LDg4OiRWYSw4OTokVmIsOTA6NDF9LG8oJFZkLCRWMCx7NjozLDQ6NDd9KSxvKCRWZSwkVjAsezY6Myw0OjQ4fSksbygkVmYsWzIsNTRdLHsxNzo0OX0pLHsyMDoyOCw1MDo1MCw2NDoyOSw2NTozOCw2NjozOSw2NzokVjMsNzM6JFZjLDc1OiRWNSw4MjozMSw4MzozMiw4NDokVjYsODU6JFY3LDg2OiRWOCw4NzokVjksODg6JFZhLDg5OiRWYiw5MDo0MX0sbygkVmcsJFYwLHs2OjMsNDo1MX0pLG8oWzUsMTQsMTUsMTgsMTksMjksMzQsMzksNDQsNDcsNDgsNTMsNTcsNjFdLFsyLDEwXSksezIwOjUyLDY0OjUzLDY1OjM4LDY2OjM5LDY3OiRWMyw3MzokVmMsNzU6JFY1LDgyOjMxLDgzOjMyLDg0OiRWNiw4NTokVjcsODY6JFY4LDg3OiRWOSw4ODokVmEsODk6JFZiLDkwOjQxfSx7MjA6NTQsNjQ6NTMsNjU6MzgsNjY6MzksNjc6JFYzLDczOiRWYyw3NTokVjUsODI6MzEsODM6MzIsODQ6JFY2LDg1OiRWNyw4NjokVjgsODc6JFY5LDg4OiRWYSw4OTokVmIsOTA6NDF9LHsyMDo1NSw2NDo1Myw2NTozOCw2NjozOSw2NzokVjMsNzM6JFZjLDc1OiRWNSw4MjozMSw4MzozMiw4NDokVjYsODU6JFY3LDg2OiRWOCw4NzokVjksODg6JFZhLDg5OiRWYiw5MDo0MX0sezIwOjI4LDUwOjU2LDY0OjI5LDY1OjM4LDY2OjM5LDY3OiRWMyw3MzokVmMsNzU6JFY1LDgyOjMxLDgzOjMyLDg0OiRWNiw4NTokVjcsODY6JFY4LDg3OiRWOSw4ODokVmEsODk6JFZiLDkwOjQxfSx7MzM6WzEsNTddfSxvKCRWaCxbMiw4NF0sezUxOjU4fSksbyhbMjMsMzMsNTYsNjgsNzldLFsyLDM0XSx7NzI6NTksNzM6WzEsNjBdfSksbygkVmksWzIsMjhdKSxvKCRWaSxbMiwyOV0sezkxOjYxLDkyOiRWaiw5MzokVmt9KSxvKCRWbCxbMiwxMDRdKSxvKCRWaSxbMiwzOF0pLG8oJFZpLFsyLDM5XSksbygkVmksWzIsNDBdKSxvKCRWaSxbMiw0MV0pLG8oJFZpLFsyLDQyXSksbygkVmksWzIsNDNdKSxvKCRWaSxbMiw0NF0pLG8oJFZtLFsyLDMwXSksbygkVm0sWzIsMzFdKSxvKFsyMywzMyw1Niw2Nyw2OCw3Myw3NSw3OSw4NCw4NSw4Niw4Nyw4OCw4OSw5Miw5M10sJFZuLHs3NDokVm99KSxvKCRWaSxbMiw0OV0sezkxOjY1LDkyOiRWaiw5MzokVmt9KSx7NzM6JFZjLDkwOjY2fSxvKCRWcCxbMiwxMDZdLHs3Njo2N30pLHsyMDoyOCw0OTo2OCw1MDo2OSw2NDoyOSw2NTozOCw2NjozOSw2NzokVjMsNzE6MjcsNzI6MzAsNzM6JFY0LDc1OiRWNSw4MjozMSw4MzozMiw4NDokVjYsODU6JFY3LDg2OiRWOCw4NzokVjksODg6JFZhLDg5OiRWYiw5MDo0MX0sbygkVnEsWzIsODhdLHs1NDo3MH0pLG8oJFZtLCRWbiksezI1OjcxLDM4OjczLDM5OiRWciw0Mzo3NCw0NDokVnMsNDU6NzIsNDc6WzIsNjBdfSx7Mjg6NzcsNDM6NzgsNDQ6JFZzLDQ3OlsyLDYyXX0sezEzOjgwLDE1OiRWMSwxODpbMSw3OV19LG8oJFZoLFsyLDkyXSx7NTg6ODF9KSx7MjY6ODIsNDc6JFZ0fSxvKCRWdSxbMiw2NF0sezMwOjg0fSksezkxOjYxLDkyOiRWaiw5MzokVmt9LG8oJFZ1LFsyLDcwXSx7MzU6ODV9KSxvKCRWdixbMiw1Nl0sezIxOjg2fSksbygkVmgsWzIsOTZdLHs2Mjo4N30pLG8oJFYyLFsyLDIyXSksezIwOjI4LDMzOlsyLDg2XSw0OTo5MCw1MDo4OSw1Mjo4OCw2NDoyOSw2NTozOCw2NjozOSw2NzokVjMsNzE6MjcsNzI6MzAsNzM6JFY0LDc1OiRWNSw4MjozMSw4MzozMiw4NDokVjYsODU6JFY3LDg2OiRWOCw4NzokVjksODg6JFZhLDg5OiRWYiw5MDo0MX0sbygkVmwsWzIsMTA1XSksezc0OiRWb30sezczOiRWYyw5MDo5MX0sezczOlsyLDQ2XX0sezczOlsyLDQ3XX0sezIwOjI4LDUwOjkyLDY0OjI5LDY1OjM4LDY2OjM5LDY3OiRWMyw3MzokVmMsNzU6JFY1LDgyOjMxLDgzOjMyLDg0OiRWNiw4NTokVjcsODY6JFY4LDg3OiRWOSw4ODokVmEsODk6JFZiLDkwOjQxfSx7NzM6WzEsOTNdfSxvKCRWaSxbMiw0NV0sezkxOjY1LDkyOiRWaiw5MzokVmt9KSx7MjA6MjgsNTA6OTUsNjQ6MjksNjU6MzgsNjY6MzksNjc6JFYzLDczOiRWYyw3NTokVjUsNzc6WzEsOTRdLDgyOjMxLDgzOjMyLDg0OiRWNiw4NTokVjcsODY6JFY4LDg3OiRWOSw4ODokVmEsODk6JFZiLDkwOjQxfSx7Njg6WzEsOTZdfSxvKCRWdyxbMiwxMDBdLHs2OTo5N30pLHsyMDoyOCw0OToxMDAsNTA6OTksNTU6OTgsNTY6WzIsOTBdLDY0OjI5LDY1OjM4LDY2OjM5LDY3OiRWMyw3MToyNyw3MjozMCw3MzokVjQsNzU6JFY1LDgyOjMxLDgzOjMyLDg0OiRWNiw4NTokVjcsODY6JFY4LDg3OiRWOSw4ODokVmEsODk6JFZiLDkwOjQxfSx7MjY6MTAxLDQ3OiRWdH0sezQ3OlsyLDYxXX0sbygkVmQsJFYwLHs2OjMsNDoxMDJ9KSx7NDc6WzIsMjBdfSx7MjA6MTAzLDY0OjUzLDY1OjM4LDY2OjM5LDY3OiRWMyw3MzokVmMsNzU6JFY1LDgyOjMxLDgzOjMyLDg0OiRWNiw4NTokVjcsODY6JFY4LDg3OiRWOSw4ODokVmEsODk6JFZiLDkwOjQxfSxvKCRWZywkVjAsezY6Myw0OjEwNH0pLHsyNjoxMDUsNDc6JFZ0fSx7NDc6WzIsNjNdfSxvKCRWMixbMiwxMV0pLG8oJFZmLFsyLDU1XSksezIwOjI4LDMzOlsyLDk0XSw0OToxMDgsNTA6MTA3LDU5OjEwNiw2NDoyOSw2NTozOCw2NjozOSw2NzokVjMsNzE6MjcsNzI6MzAsNzM6JFY0LDc1OiRWNSw4MjozMSw4MzozMiw4NDokVjYsODU6JFY3LDg2OiRWOCw4NzokVjksODg6JFZhLDg5OiRWYiw5MDo0MX0sbygkVjIsWzIsMjZdKSx7MjA6MTA5LDY0OjUzLDY1OjM4LDY2OjM5LDY3OiRWMyw3MzokVmMsNzU6JFY1LDgyOjMxLDgzOjMyLDg0OiRWNiw4NTokVjcsODY6JFY4LDg3OiRWOSw4ODokVmEsODk6JFZiLDkwOjQxfSxvKCRWeCxbMiw2Nl0sezcxOjI3LDIwOjI4LDY0OjI5LDcyOjMwLDgyOjMxLDgzOjMyLDY1OjM4LDY2OjM5LDkwOjQxLDMxOjExMCw1MDoxMTEsNDk6MTEyLDY3OiRWMyw3MzokVjQsNzU6JFY1LDg0OiRWNiw4NTokVjcsODY6JFY4LDg3OiRWOSw4ODokVmEsODk6JFZifSksbygkVngsWzIsNzJdLHs3MToyNywyMDoyOCw2NDoyOSw3MjozMCw4MjozMSw4MzozMiw2NTozOCw2NjozOSw5MDo0MSwzNjoxMTMsNTA6MTE0LDQ5OjExNSw2NzokVjMsNzM6JFY0LDc1OiRWNSw4NDokVjYsODU6JFY3LDg2OiRWOCw4NzokVjksODg6JFZhLDg5OiRWYn0pLHsyMDoyOCwyMjoxMTYsMjM6WzIsNThdLDQ5OjExOCw1MDoxMTcsNjQ6MjksNjU6MzgsNjY6MzksNjc6JFYzLDcxOjI3LDcyOjMwLDczOiRWNCw3NTokVjUsODI6MzEsODM6MzIsODQ6JFY2LDg1OiRWNyw4NjokVjgsODc6JFY5LDg4OiRWYSw4OTokVmIsOTA6NDF9LHsyMDoyOCwzMzpbMiw5OF0sNDk6MTIxLDUwOjEyMCw2MzoxMTksNjQ6MjksNjU6MzgsNjY6MzksNjc6JFYzLDcxOjI3LDcyOjMwLDczOiRWNCw3NTokVjUsODI6MzEsODM6MzIsODQ6JFY2LDg1OiRWNyw4NjokVjgsODc6JFY5LDg4OiRWYSw4OTokVmIsOTA6NDF9LHszMzpbMSwxMjJdfSxvKCRWaCxbMiw4NV0pLHszMzpbMiw4N119LG8oJFZpLFsyLDQ4XSx7OTE6NjUsOTI6JFZqLDkzOiRWa30pLG8oJFZsLFsyLDM1XSksbygkVm0sWzIsNTBdKSxvKCRWbSxbMiwzNl0pLG8oJFZwLFsyLDEwN10pLG8oJFZtLFsyLDMyXSksezIwOjI4LDQ5OjEyNSw1MDoxMjQsNjQ6MjksNjU6MzgsNjY6MzksNjc6JFYzLDY4OlsyLDEwMl0sNzA6MTIzLDcxOjI3LDcyOjMwLDczOiRWNCw3NTokVjUsODI6MzEsODM6MzIsODQ6JFY2LDg1OiRWNyw4NjokVjgsODc6JFY5LDg4OiRWYSw4OTokVmIsOTA6NDF9LHs1NjpbMSwxMjZdfSxvKCRWcSxbMiw4OV0pLHs1NjpbMiw5MV19LG8oJFYyLFsyLDEzXSksezM4OjczLDM5OiRWciw0Mzo3NCw0NDokVnMsNDU6MTI4LDQ2OjEyNyw0NzpbMiw4Ml19LG8oJFZ1LFsyLDc2XSx7NDA6MTI5fSksezQ3OlsyLDE4XX0sbygkVjIsWzIsMTRdKSx7MzM6WzEsMTMwXX0sbygkVmgsWzIsOTNdKSx7MzM6WzIsOTVdfSx7MzM6WzEsMTMxXX0sezMyOjEzMiwzMzpbMiw2OF0sNzg6MTMzLDc5OiRWeX0sbygkVnUsWzIsNjVdKSxvKCRWeCxbMiw2N10pLHszMzpbMiw3NF0sMzc6MTM1LDc4OjEzNiw3OTokVnl9LG8oJFZ1LFsyLDcxXSksbygkVngsWzIsNzNdKSx7MjM6WzEsMTM3XX0sbygkVnYsWzIsNTddKSx7MjM6WzIsNTldfSx7MzM6WzEsMTM4XX0sbygkVmgsWzIsOTddKSx7MzM6WzIsOTldfSxvKCRWMixbMiwyM10pLHs2ODpbMSwxMzldfSxvKCRWdyxbMiwxMDFdKSx7Njg6WzIsMTAzXX0sbygkVjIsWzIsMjRdKSx7NDc6WzIsMTldfSx7NDc6WzIsODNdfSxvKCRWeCxbMiw3OF0sezcxOjI3LDIwOjI4LDY0OjI5LDcyOjMwLDgyOjMxLDgzOjMyLDY1OjM4LDY2OjM5LDkwOjQxLDQxOjE0MCw1MDoxNDEsNDk6MTQyLDY3OiRWMyw3MzokVjQsNzU6JFY1LDg0OiRWNiw4NTokVjcsODY6JFY4LDg3OiRWOSw4ODokVmEsODk6JFZifSksbygkVjIsWzIsMjVdKSxvKCRWMixbMiwyMV0pLHszMzpbMSwxNDNdfSx7MzM6WzIsNjldfSx7NzM6WzEsMTQ1XSw4MDoxNDR9LHszMzpbMSwxNDZdfSx7MzM6WzIsNzVdfSxvKCRWZixbMiwxMl0pLG8oJFZnLFsyLDI3XSksbygkVm0sWzIsMzNdKSx7MzM6WzIsODBdLDQyOjE0Nyw3ODoxNDgsNzk6JFZ5fSxvKCRWdSxbMiw3N10pLG8oJFZ4LFsyLDc5XSksbygkVmQsWzIsMTVdKSx7NzM6WzEsMTUwXSw4MTpbMSwxNDldfSxvKCRWeixbMiwxMDhdKSxvKCRWZSxbMiwxNl0pLHszMzpbMSwxNTFdfSx7MzM6WzIsODFdfSx7MzM6WzIsMzddfSxvKCRWeixbMiwxMDldKSxvKCRWZCxbMiwxN10pXSxcbmRlZmF1bHRBY3Rpb25zOiB7NDpbMiwxXSw2MjpbMiw0Nl0sNjM6WzIsNDddLDcyOlsyLDYxXSw3NDpbMiwyMF0sNzg6WzIsNjNdLDkwOlsyLDg3XSwxMDA6WzIsOTFdLDEwNDpbMiwxOF0sMTA4OlsyLDk1XSwxMTg6WzIsNTldLDEyMTpbMiw5OV0sMTI1OlsyLDEwM10sMTI3OlsyLDE5XSwxMjg6WzIsODNdLDEzMzpbMiw2OV0sMTM2OlsyLDc1XSwxNDg6WzIsODFdLDE0OTpbMiwzN119LFxucGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvciAoc3RyLCBoYXNoKSB7XG4gICAgaWYgKGhhc2gucmVjb3ZlcmFibGUpIHtcbiAgICAgICAgdGhpcy50cmFjZShzdHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICBlcnJvci5oYXNoID0gaGFzaDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxufSxcbnBhcnNlOiBmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBbMF0sIHRzdGFjayA9IFtdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9ICcnLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIHJlY292ZXJpbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgIHZhciBhcmdzID0gbHN0YWNrLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICB2YXIgbGV4ZXIgPSBPYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpO1xuICAgIHZhciBzaGFyZWRTdGF0ZSA9IHsgeXk6IHt9IH07XG4gICAgZm9yICh2YXIgayBpbiB0aGlzLnl5KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwgaykpIHtcbiAgICAgICAgICAgIHNoYXJlZFN0YXRlLnl5W2tdID0gdGhpcy55eVtrXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXhlci5zZXRJbnB1dChpbnB1dCwgc2hhcmVkU3RhdGUueXkpO1xuICAgIHNoYXJlZFN0YXRlLnl5LmxleGVyID0gbGV4ZXI7XG4gICAgc2hhcmVkU3RhdGUueXkucGFyc2VyID0gdGhpcztcbiAgICBpZiAodHlwZW9mIGxleGVyLnl5bGxvYyA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsZXhlci55eWxsb2MgPSB7fTtcbiAgICB9XG4gICAgdmFyIHl5bG9jID0gbGV4ZXIueXlsbG9jO1xuICAgIGxzdGFjay5wdXNoKHl5bG9jKTtcbiAgICB2YXIgcmFuZ2VzID0gbGV4ZXIub3B0aW9ucyAmJiBsZXhlci5vcHRpb25zLnJhbmdlcztcbiAgICBpZiAodHlwZW9mIHNoYXJlZFN0YXRlLnl5LnBhcnNlRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gc2hhcmVkU3RhdGUueXkucGFyc2VFcnJvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgfVxuICAgIF90b2tlbl9zdGFjazpcbiAgICAgICAgdmFyIGxleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgICAgIHRva2VuID0gbGV4ZXIubGV4KCkgfHwgRU9GO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9O1xuICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gbGV4KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICd1bmRlZmluZWQnIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICAgICAgICB2YXIgZXJyU3RyID0gJyc7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IFRFUlJPUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaCgnXFwnJyArIHRoaXMudGVybWluYWxzX1twXSArICdcXCcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobGV4ZXIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0ciA9ICdQYXJzZSBlcnJvciBvbiBsaW5lICcgKyAoeXlsaW5lbm8gKyAxKSArICc6XFxuJyArIGxleGVyLnNob3dQb3NpdGlvbigpICsgJ1xcbkV4cGVjdGluZyAnICsgZXhwZWN0ZWQuam9pbignLCAnKSArICcsIGdvdCBcXCcnICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyAnXFwnJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcnJTdHIgPSAnUGFyc2UgZXJyb3Igb24gbGluZSAnICsgKHl5bGluZW5vICsgMSkgKyAnOiBVbmV4cGVjdGVkICcgKyAoc3ltYm9sID09IEVPRiA/ICdlbmQgb2YgaW5wdXQnIDogJ1xcJycgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArICdcXCcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBsZXhlci5tYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAgICAgbGluZTogbGV4ZXIueXlsaW5lbm8sXG4gICAgICAgICAgICAgICAgICAgIGxvYzogeXlsb2MsXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICcgKyBzdGF0ZSArICcsIHRva2VuOiAnICsgc3ltYm9sKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaChsZXhlci55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2gobGV4ZXIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIXByZUVycm9yU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgeXlsZW5nID0gbGV4ZXIueXlsZW5nO1xuICAgICAgICAgICAgICAgIHl5dGV4dCA9IGxleGVyLnl5dGV4dDtcbiAgICAgICAgICAgICAgICB5eWxpbmVubyA9IGxleGVyLnl5bGluZW5vO1xuICAgICAgICAgICAgICAgIHl5bG9jID0gbGV4ZXIueXlsbG9jO1xuICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyaW5nID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBwcmVFcnJvclN5bWJvbDtcbiAgICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTtcbiAgICAgICAgICAgIHl5dmFsLiQgPSB2c3RhY2tbdnN0YWNrLmxlbmd0aCAtIGxlbl07XG4gICAgICAgICAgICB5eXZhbC5fJCA9IHtcbiAgICAgICAgICAgICAgICBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgICAgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSxcbiAgICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW1xuICAgICAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLFxuICAgICAgICAgICAgICAgICAgICBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzFdXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeXl2YWwsIFtcbiAgICAgICAgICAgICAgICB5eXRleHQsXG4gICAgICAgICAgICAgICAgeXlsZW5nLFxuICAgICAgICAgICAgICAgIHl5bGluZW5vLFxuICAgICAgICAgICAgICAgIHNoYXJlZFN0YXRlLnl5LFxuICAgICAgICAgICAgICAgIGFjdGlvblsxXSxcbiAgICAgICAgICAgICAgICB2c3RhY2ssXG4gICAgICAgICAgICAgICAgbHN0YWNrXG4gICAgICAgICAgICBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufX07XG4vKiBnZW5lcmF0ZWQgYnkgamlzb24tbGV4IDAuMy40ICovXG52YXIgbGV4ZXIgPSAoZnVuY3Rpb24oKXtcbnZhciBsZXhlciA9ICh7XG5cbkVPRjoxLFxuXG5wYXJzZUVycm9yOmZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4vLyByZXNldHMgdGhlIGxleGVyLCBzZXRzIG5ldyBpbnB1dFxuc2V0SW5wdXQ6ZnVuY3Rpb24gKGlucHV0LCB5eSkge1xuICAgICAgICB0aGlzLnl5ID0geXkgfHwgdGhpcy55eSB8fCB7fTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fbW9yZSA9IHRoaXMuX2JhY2t0cmFjayA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSAnJztcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFsnSU5JVElBTCddO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtcbiAgICAgICAgICAgIGZpcnN0X2xpbmU6IDEsXG4gICAgICAgICAgICBmaXJzdF9jb2x1bW46IDAsXG4gICAgICAgICAgICBsYXN0X2xpbmU6IDEsXG4gICAgICAgICAgICBsYXN0X2NvbHVtbjogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbMCwwXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbi8vIGNvbnN1bWVzIGFuZCByZXR1cm5zIG9uZSBjaGFyIGZyb20gdGhlIGlucHV0XG5pbnB1dDpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG5cbi8vIHVuc2hpZnRzIG9uZSBjaGFyIChvciBhIHN0cmluZykgaW50byB0aGUgaW5wdXRcbnVucHV0OmZ1bmN0aW9uIChjaCkge1xuICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuXG4gICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDtcbiAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuKTtcbiAgICAgICAgLy90aGlzLnl5bGVuZyAtPSBsZW47XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjtcbiAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO1xuICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuXG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSxcbiAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsXG4gICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/XG4gICAgICAgICAgICAgICAgKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMClcbiAgICAgICAgICAgICAgICAgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6XG4gICAgICAgICAgICAgIHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4vLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgY2FjaGVzIG1hdGNoZWQgdGV4dCBhbmQgYXBwZW5kcyBpdCBvbiBuZXh0IGFjdGlvblxubW9yZTpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4vLyBXaGVuIGNhbGxlZCBmcm9tIGFjdGlvbiwgc2lnbmFscyB0aGUgbGV4ZXIgdGhhdCB0aGlzIHJ1bGUgZmFpbHMgdG8gbWF0Y2ggdGhlIGlucHV0LCBzbyB0aGUgbmV4dCBtYXRjaGluZyBydWxlIChyZWdleCkgc2hvdWxkIGJlIHRlc3RlZCBpbnN0ZWFkLlxucmVqZWN0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2JhY2t0cmFjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCdMZXhpY2FsIGVycm9yIG9uIGxpbmUgJyArICh0aGlzLnl5bGluZW5vICsgMSkgKyAnLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXFxuJyArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuLy8gcmV0YWluIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgbWF0Y2hcbmxlc3M6ZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICB9LFxuXG4vLyBkaXNwbGF5cyBhbHJlYWR5IG1hdGNoZWQgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG5wYXN0SW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gJy4uLic6JycpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgfSxcblxuLy8gZGlzcGxheXMgdXBjb21pbmcgaW5wdXQsIGkuZS4gZm9yIGVycm9yIG1lc3NhZ2VzXG51cGNvbWluZ0lucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAtbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwyMCkgKyAobmV4dC5sZW5ndGggPiAyMCA/ICcuLi4nIDogJycpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgfSxcblxuLy8gZGlzcGxheXMgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiB3aGVyZSB0aGUgbGV4aW5nIGVycm9yIG9jY3VycmVkLCBpLmUuIGZvciBlcnJvciBtZXNzYWdlc1xuc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMgKyBcIl5cIjtcbiAgICB9LFxuXG4vLyB0ZXN0IHRoZSBsZXhlZCB0b2tlbjogcmV0dXJuIEZBTFNFIHdoZW4gbm90IGEgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gdG9rZW5cbnRlc3RfbWF0Y2g6ZnVuY3Rpb24obWF0Y2gsIGluZGV4ZWRfcnVsZSkge1xuICAgICAgICB2YXIgdG9rZW4sXG4gICAgICAgICAgICBsaW5lcyxcbiAgICAgICAgICAgIGJhY2t1cDtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgLy8gc2F2ZSBjb250ZXh0XG4gICAgICAgICAgICBiYWNrdXAgPSB7XG4gICAgICAgICAgICAgICAgeXlsaW5lbm86IHRoaXMueXlsaW5lbm8sXG4gICAgICAgICAgICAgICAgeXlsbG9jOiB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHl5dGV4dDogdGhpcy55eXRleHQsXG4gICAgICAgICAgICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICAgICAgICAgICAgbWF0Y2hlczogdGhpcy5tYXRjaGVzLFxuICAgICAgICAgICAgICAgIG1hdGNoZWQ6IHRoaXMubWF0Y2hlZCxcbiAgICAgICAgICAgICAgICB5eWxlbmc6IHRoaXMueXlsZW5nLFxuICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgX21vcmU6IHRoaXMuX21vcmUsXG4gICAgICAgICAgICAgICAgX2lucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgICAgICAgICAgICB5eTogdGhpcy55eSxcbiAgICAgICAgICAgICAgICBjb25kaXRpb25TdGFjazogdGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxcbiAgICAgICAgICAgICAgICBkb25lOiB0aGlzLmRvbmVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgICAgIGJhY2t1cC55eWxsb2MucmFuZ2UgPSB0aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/Olxcclxcbj98XFxuKS4qL2cpO1xuICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICAgIHRoaXMueXlsaW5lbm8gKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueXlsbG9jID0ge1xuICAgICAgICAgICAgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSxcbiAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgIHRoaXMubWF0Y2hlcyA9IG1hdGNoO1xuICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9iYWNrdHJhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgaW5kZXhlZF9ydWxlLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9iYWNrdHJhY2spIHtcbiAgICAgICAgICAgIC8vIHJlY292ZXIgY29udGV4dFxuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBiYWNrdXApIHtcbiAgICAgICAgICAgICAgICB0aGlzW2tdID0gYmFja3VwW2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBydWxlIGFjdGlvbiBjYWxsZWQgcmVqZWN0KCkgaW1wbHlpbmcgdGhlIG5leHQgcnVsZSBzaG91bGQgYmUgdGVzdGVkIGluc3RlYWQuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbi8vIHJldHVybiBuZXh0IG1hdGNoIGluIGlucHV0XG5uZXh0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5faW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdG9rZW4sXG4gICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgIHRlbXBNYXRjaCxcbiAgICAgICAgICAgIGluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHtcbiAgICAgICAgICAgIHRoaXMueXl0ZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRlbXBNYXRjaCA9IHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1dKTtcbiAgICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gdGVtcE1hdGNoO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcikge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudGVzdF9tYXRjaCh0ZW1wTWF0Y2gsIHJ1bGVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JhY2t0cmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBydWxlIGFjdGlvbiBjYWxsZWQgcmVqZWN0KCkgaW1wbHlpbmcgYSBydWxlIE1JU21hdGNoLlxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZTogdGhpcyBpcyBhIGxleGVyIHJ1bGUgd2hpY2ggY29uc3VtZXMgaW5wdXQgd2l0aG91dCBwcm9kdWNpbmcgYSB0b2tlbiAoZS5nLiB3aGl0ZXNwYWNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnRlc3RfbWF0Y2gobWF0Y2gsIHJ1bGVzW2luZGV4XSk7XG4gICAgICAgICAgICBpZiAodG9rZW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZWxzZTogdGhpcyBpcyBhIGxleGVyIHJ1bGUgd2hpY2ggY29uc3VtZXMgaW5wdXQgd2l0aG91dCBwcm9kdWNpbmcgYSB0b2tlbiAoZS5nLiB3aGl0ZXNwYWNlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcignTGV4aWNhbCBlcnJvciBvbiBsaW5lICcgKyAodGhpcy55eWxpbmVubyArIDEpICsgJy4gVW5yZWNvZ25pemVkIHRleHQuXFxuJyArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMueXlsaW5lbm9cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcblxuLy8gcmV0dXJuIG5leHQgbWF0Y2ggdGhhdCBoYXMgYSB0b2tlblxubGV4OmZ1bmN0aW9uIGxleCAoKSB7XG4gICAgICAgIHZhciByID0gdGhpcy5uZXh0KCk7XG4gICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgfSxcblxuLy8gYWN0aXZhdGVzIGEgbmV3IGxleGVyIGNvbmRpdGlvbiBzdGF0ZSAocHVzaGVzIHRoZSBuZXcgbGV4ZXIgY29uZGl0aW9uIHN0YXRlIG9udG8gdGhlIGNvbmRpdGlvbiBzdGFjaylcbmJlZ2luOmZ1bmN0aW9uIGJlZ2luIChjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgfSxcblxuLy8gcG9wIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGUgb2ZmIHRoZSBjb25kaXRpb24gc3RhY2tcbnBvcFN0YXRlOmZ1bmN0aW9uIHBvcFN0YXRlICgpIHtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1swXTtcbiAgICAgICAgfVxuICAgIH0sXG5cbi8vIHByb2R1Y2UgdGhlIGxleGVyIHJ1bGUgc2V0IHdoaWNoIGlzIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgbGV4ZXIgY29uZGl0aW9uIHN0YXRlXG5fY3VycmVudFJ1bGVzOmZ1bmN0aW9uIF9jdXJyZW50UnVsZXMgKCkge1xuICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggJiYgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXV0ucnVsZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zW1wiSU5JVElBTFwiXS5ydWxlcztcbiAgICAgICAgfVxuICAgIH0sXG5cbi8vIHJldHVybiB0aGUgY3VycmVudGx5IGFjdGl2ZSBsZXhlciBjb25kaXRpb24gc3RhdGU7IHdoZW4gYW4gaW5kZXggYXJndW1lbnQgaXMgcHJvdmlkZWQgaXQgcHJvZHVjZXMgdGhlIE4tdGggcHJldmlvdXMgY29uZGl0aW9uIHN0YXRlLCBpZiBhdmFpbGFibGVcbnRvcFN0YXRlOmZ1bmN0aW9uIHRvcFN0YXRlIChuKSB7XG4gICAgICAgIG4gPSB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDEgLSBNYXRoLmFicyhuIHx8IDApO1xuICAgICAgICBpZiAobiA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFja1tuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBcIklOSVRJQUxcIjtcbiAgICAgICAgfVxuICAgIH0sXG5cbi8vIGFsaWFzIGZvciBiZWdpbihjb25kaXRpb24pXG5wdXNoU3RhdGU6ZnVuY3Rpb24gcHVzaFN0YXRlIChjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pO1xuICAgIH0sXG5cbi8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXRlcyBjdXJyZW50bHkgb24gdGhlIHN0YWNrXG5zdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbiBzdGF0ZVN0YWNrU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoO1xuICAgIH0sXG5vcHRpb25zOiB7fSxcbnBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eSx5eV8sJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucyxZWV9TVEFSVCkge1xuXG5mdW5jdGlvbiBzdHJpcChzdGFydCwgZW5kKSB7XG4gIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHJpbmcoc3RhcnQsIHl5Xy55eWxlbmcgLSBlbmQgKyBzdGFydCk7XG59XG5cblxudmFyIFlZU1RBVEU9WVlfU1RBUlQ7XG5zd2l0Y2goJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykge1xuY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih5eV8ueXl0ZXh0LnNsaWNlKC0yKSA9PT0gXCJcXFxcXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXAoMCwxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwibXVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZih5eV8ueXl0ZXh0LnNsaWNlKC0xKSA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCgwLDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJlbXVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihcIm11XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHl5Xy55eXRleHQpIHJldHVybiAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYnJlYWs7XG5jYXNlIDE6cmV0dXJuIDE1O1xuYnJlYWs7XG5jYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMzp0aGlzLmJlZ2luKCdyYXcnKTsgcmV0dXJuIDE1O1xuYnJlYWs7XG5jYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBiZSB1c2luZyBgdGhpcy50b3BTdGF0ZSgpYCBiZWxvdywgYnV0IGl0IGN1cnJlbnRseVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdGhlIHNlY29uZCB0b3AgaW5zdGVhZCBvZiB0aGUgZmlyc3QgdG9wLiBPcGVuZWQgYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpc3N1ZSBhYm91dCBpdCBhdCBodHRwczovL2dpdGh1Yi5jb20vemFhY2gvamlzb24vaXNzdWVzLzI5MVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdID09PSAncmF3Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCg1LCA5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSA1OiByZXR1cm4gMTU7IFxuYnJlYWs7XG5jYXNlIDY6XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgcmV0dXJuIDE0O1xuXG5icmVhaztcbmNhc2UgNzpyZXR1cm4gNjc7XG5icmVhaztcbmNhc2UgODpyZXR1cm4gNjg7XG5icmVhaztcbmNhc2UgOTpcbiAgaWYgKHl5LnN5bnRheC5zcXVhcmUgPT09ICdzdHJpbmcnKSB7XG4gICAgdGhpcy51bnB1dCh5eV8ueXl0ZXh0KTtcbiAgICAvLyBlc2NhcGVkIGxpdGVyYWxcbiAgICB0aGlzLmJlZ2luKCdlc2NsJyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDc1O1xuICB9XG5cbmJyZWFrO1xuY2FzZSAxMDpyZXR1cm4gNzc7XG5icmVhaztcbmNhc2UgMTE6IHJldHVybiAxOTsgXG5icmVhaztcbmNhc2UgMTI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oJ3JhdycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAyMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYnJlYWs7XG5jYXNlIDEzOnJldHVybiA1NztcbmJyZWFrO1xuY2FzZSAxNDpyZXR1cm4gNjE7XG5icmVhaztcbmNhc2UgMTU6cmV0dXJuIDI5O1xuYnJlYWs7XG5jYXNlIDE2OnJldHVybiA0NztcbmJyZWFrO1xuY2FzZSAxNzp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiA0NDtcbmJyZWFrO1xuY2FzZSAxODp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiA0NDtcbmJyZWFrO1xuY2FzZSAxOTpyZXR1cm4gMzQ7XG5icmVhaztcbmNhc2UgMjA6cmV0dXJuIDM5O1xuYnJlYWs7XG5jYXNlIDIxOnJldHVybiA1MztcbmJyZWFrO1xuY2FzZSAyMjpyZXR1cm4gNDg7XG5icmVhaztcbmNhc2UgMjM6XG4gIHRoaXMudW5wdXQoeXlfLnl5dGV4dCk7XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgdGhpcy5iZWdpbignY29tJyk7XG5cbmJyZWFrO1xuY2FzZSAyNDpcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICByZXR1cm4gMTQ7XG5cbmJyZWFrO1xuY2FzZSAyNTpyZXR1cm4gNDg7XG5icmVhaztcbmNhc2UgMjY6cmV0dXJuIDc0O1xuYnJlYWs7XG5jYXNlIDI3OnJldHVybiA3MztcbmJyZWFrO1xuY2FzZSAyODpyZXR1cm4gNzM7XG5icmVhaztcbmNhc2UgMjk6cmV0dXJuIDkzO1xuYnJlYWs7XG5jYXNlIDMwOnJldHVybiA5MjtcbmJyZWFrO1xuY2FzZSAzMTovLyBpZ25vcmUgd2hpdGVzcGFjZVxuYnJlYWs7XG5jYXNlIDMyOnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDU2O1xuYnJlYWs7XG5jYXNlIDMzOnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDMzO1xuYnJlYWs7XG5jYXNlIDM0Onl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpOyByZXR1cm4gODQ7XG5icmVhaztcbmNhc2UgMzU6eXlfLnl5dGV4dCA9IHN0cmlwKDEsMikucmVwbGFjZSgvXFxcXCcvZyxcIidcIik7IHJldHVybiA4NDtcbmJyZWFrO1xuY2FzZSAzNjpyZXR1cm4gODk7XG5icmVhaztcbmNhc2UgMzc6cmV0dXJuIDg2O1xuYnJlYWs7XG5jYXNlIDM4OnJldHVybiA4NjtcbmJyZWFrO1xuY2FzZSAzOTpyZXR1cm4gODc7XG5icmVhaztcbmNhc2UgNDA6cmV0dXJuIDg4O1xuYnJlYWs7XG5jYXNlIDQxOnJldHVybiA4NTtcbmJyZWFrO1xuY2FzZSA0MjpyZXR1cm4gNzk7XG5icmVhaztcbmNhc2UgNDM6cmV0dXJuIDgxO1xuYnJlYWs7XG5jYXNlIDQ0OnJldHVybiA3MztcbmJyZWFrO1xuY2FzZSA0NTpcbiAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvXFxcXChbXFxcXFxcXV0pL2csJyQxJyk7XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgcmV0dXJuIDczO1xuXG5icmVhaztcbmNhc2UgNDY6cmV0dXJuICdJTlZBTElEJztcbmJyZWFrO1xuY2FzZSA0NzpyZXR1cm4gNTtcbmJyZWFrO1xufVxufSxcbnJ1bGVzOiBbL14oPzpbXlxceDAwXSo/KD89KFxce1xceykpKS8sL14oPzpbXlxceDAwXSspLywvXig/OlteXFx4MDBdezIsfT8oPz0oXFx7XFx7fFxcXFxcXHtcXHt8XFxcXFxcXFxcXHtcXHt8JCkpKS8sL14oPzpcXHtcXHtcXHtcXHsoPz1bXi9dKSkvLC9eKD86XFx7XFx7XFx7XFx7XFwvW15cXHMhXCIjJS0sXFwuXFwvOy0+QFxcWy1cXF5gXFx7LX5dKyg/PVs9fVxcc1xcLy5dKVxcfVxcfVxcfVxcfSkvLC9eKD86W15cXHgwMF0rPyg/PShcXHtcXHtcXHtcXHspKSkvLC9eKD86W1xcc1xcU10qPy0tKH4pP1xcfVxcfSkvLC9eKD86XFwoKS8sL14oPzpcXCkpLywvXig/OlxcWykvLC9eKD86XFxdKS8sL14oPzpcXHtcXHtcXHtcXHspLywvXig/OlxcfVxcfVxcfVxcfSkvLC9eKD86XFx7XFx7KH4pPz4pLywvXig/Olxce1xceyh+KT8jPikvLC9eKD86XFx7XFx7KH4pPyNcXCo/KS8sL14oPzpcXHtcXHsofik/XFwvKS8sL14oPzpcXHtcXHsofik/XFxeXFxzKih+KT9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXHMqZWxzZVxccyoofik/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFxeKS8sL14oPzpcXHtcXHsofik/XFxzKmVsc2VcXGIpLywvXig/Olxce1xceyh+KT9cXHspLywvXig/Olxce1xceyh+KT8mKS8sL14oPzpcXHtcXHsofik/IS0tKS8sL14oPzpcXHtcXHsofik/IVtcXHNcXFNdKj9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXCo/KS8sL14oPzo9KS8sL14oPzpcXC5cXC4pLywvXig/OlxcLig/PShbPX59XFxzXFwvLilcXF18XSkpKS8sL14oPzpcXC4jKS8sL14oPzpbXFwvLl0pLywvXig/OlxccyspLywvXig/OlxcfSh+KT9cXH1cXH0pLywvXig/Oih+KT9cXH1cXH0pLywvXig/OlwiKFxcXFxbXCJdfFteXCJdKSpcIikvLC9eKD86JyhcXFxcWyddfFteJ10pKicpLywvXig/OkApLywvXig/OnRydWUoPz0oW359XFxzKVxcXV0pKSkvLC9eKD86ZmFsc2UoPz0oW359XFxzKVxcXV0pKSkvLC9eKD86dW5kZWZpbmVkKD89KFt+fVxccylcXF1dKSkpLywvXig/Om51bGwoPz0oW359XFxzKVxcXV0pKSkvLC9eKD86LT9bMC05XSsoPzpcXC5bMC05XSspPyg/PShbfn1cXHMpXFxdXSkpKS8sL14oPzphc1xccytcXHwpLywvXig/OlxcfCkvLC9eKD86KFteXFxzIVwiIyUtLFxcLlxcLzstPkBcXFstXFxeYFxcey1+XSsoPz0oWz1+fVxcc1xcLy4pXFxdfF0pKSkpLywvXig/OlxcWyhcXFxcXFxdfFteXFxdXSkqXFxdKS8sL14oPzouKS8sL14oPzokKS9dLFxuY29uZGl0aW9uczoge1wibXVcIjp7XCJydWxlc1wiOls3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0Niw0N10sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJlbXVcIjp7XCJydWxlc1wiOlsyXSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcImNvbVwiOntcInJ1bGVzXCI6WzZdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwicmF3XCI6e1wicnVsZXNcIjpbMyw0LDVdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwiZXNjbFwiOntcInJ1bGVzXCI6WzQ1XSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcIklOSVRJQUxcIjp7XCJydWxlc1wiOlswLDEsNDddLFwiaW5jbHVzaXZlXCI6dHJ1ZX19XG59KTtcbnJldHVybiBsZXhlcjtcbn0pKCk7XG5wYXJzZXIubGV4ZXIgPSBsZXhlcjtcbmZ1bmN0aW9uIFBhcnNlciAoKSB7XG4gIHRoaXMueXkgPSB7fTtcbn1cblBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXI7cGFyc2VyLlBhcnNlciA9IFBhcnNlcjtcbnJldHVybiBuZXcgUGFyc2VyO1xufSkoKTtleHBvcnQgZGVmYXVsdCBwYXJzZXI7XG4iXX0=","/**\n * generated from https://raw.githubusercontent.com/w3c/html/26b5126f96f736f796b9e29718138919dd513744/entities.json\n * do not edit\n */\nvar namedCharRefs = {\n    Aacute: \"Á\", aacute: \"á\", Abreve: \"Ă\", abreve: \"ă\", ac: \"∾\", acd: \"∿\", acE: \"∾̳\", Acirc: \"Â\", acirc: \"â\", acute: \"´\", Acy: \"А\", acy: \"а\", AElig: \"Æ\", aelig: \"æ\", af: \"\\u2061\", Afr: \"𝔄\", afr: \"𝔞\", Agrave: \"À\", agrave: \"à\", alefsym: \"ℵ\", aleph: \"ℵ\", Alpha: \"Α\", alpha: \"α\", Amacr: \"Ā\", amacr: \"ā\", amalg: \"⨿\", amp: \"&\", AMP: \"&\", andand: \"⩕\", And: \"⩓\", and: \"∧\", andd: \"⩜\", andslope: \"⩘\", andv: \"⩚\", ang: \"∠\", ange: \"⦤\", angle: \"∠\", angmsdaa: \"⦨\", angmsdab: \"⦩\", angmsdac: \"⦪\", angmsdad: \"⦫\", angmsdae: \"⦬\", angmsdaf: \"⦭\", angmsdag: \"⦮\", angmsdah: \"⦯\", angmsd: \"∡\", angrt: \"∟\", angrtvb: \"⊾\", angrtvbd: \"⦝\", angsph: \"∢\", angst: \"Å\", angzarr: \"⍼\", Aogon: \"Ą\", aogon: \"ą\", Aopf: \"𝔸\", aopf: \"𝕒\", apacir: \"⩯\", ap: \"≈\", apE: \"⩰\", ape: \"≊\", apid: \"≋\", apos: \"'\", ApplyFunction: \"\\u2061\", approx: \"≈\", approxeq: \"≊\", Aring: \"Å\", aring: \"å\", Ascr: \"𝒜\", ascr: \"𝒶\", Assign: \"≔\", ast: \"*\", asymp: \"≈\", asympeq: \"≍\", Atilde: \"Ã\", atilde: \"ã\", Auml: \"Ä\", auml: \"ä\", awconint: \"∳\", awint: \"⨑\", backcong: \"≌\", backepsilon: \"϶\", backprime: \"‵\", backsim: \"∽\", backsimeq: \"⋍\", Backslash: \"∖\", Barv: \"⫧\", barvee: \"⊽\", barwed: \"⌅\", Barwed: \"⌆\", barwedge: \"⌅\", bbrk: \"⎵\", bbrktbrk: \"⎶\", bcong: \"≌\", Bcy: \"Б\", bcy: \"б\", bdquo: \"„\", becaus: \"∵\", because: \"∵\", Because: \"∵\", bemptyv: \"⦰\", bepsi: \"϶\", bernou: \"ℬ\", Bernoullis: \"ℬ\", Beta: \"Β\", beta: \"β\", beth: \"ℶ\", between: \"≬\", Bfr: \"𝔅\", bfr: \"𝔟\", bigcap: \"⋂\", bigcirc: \"◯\", bigcup: \"⋃\", bigodot: \"⨀\", bigoplus: \"⨁\", bigotimes: \"⨂\", bigsqcup: \"⨆\", bigstar: \"★\", bigtriangledown: \"▽\", bigtriangleup: \"△\", biguplus: \"⨄\", bigvee: \"⋁\", bigwedge: \"⋀\", bkarow: \"⤍\", blacklozenge: \"⧫\", blacksquare: \"▪\", blacktriangle: \"▴\", blacktriangledown: \"▾\", blacktriangleleft: \"◂\", blacktriangleright: \"▸\", blank: \"␣\", blk12: \"▒\", blk14: \"░\", blk34: \"▓\", block: \"█\", bne: \"=⃥\", bnequiv: \"≡⃥\", bNot: \"⫭\", bnot: \"⌐\", Bopf: \"𝔹\", bopf: \"𝕓\", bot: \"⊥\", bottom: \"⊥\", bowtie: \"⋈\", boxbox: \"⧉\", boxdl: \"┐\", boxdL: \"╕\", boxDl: \"╖\", boxDL: \"╗\", boxdr: \"┌\", boxdR: \"╒\", boxDr: \"╓\", boxDR: \"╔\", boxh: \"─\", boxH: \"═\", boxhd: \"┬\", boxHd: \"╤\", boxhD: \"╥\", boxHD: \"╦\", boxhu: \"┴\", boxHu: \"╧\", boxhU: \"╨\", boxHU: \"╩\", boxminus: \"⊟\", boxplus: \"⊞\", boxtimes: \"⊠\", boxul: \"┘\", boxuL: \"╛\", boxUl: \"╜\", boxUL: \"╝\", boxur: \"└\", boxuR: \"╘\", boxUr: \"╙\", boxUR: \"╚\", boxv: \"│\", boxV: \"║\", boxvh: \"┼\", boxvH: \"╪\", boxVh: \"╫\", boxVH: \"╬\", boxvl: \"┤\", boxvL: \"╡\", boxVl: \"╢\", boxVL: \"╣\", boxvr: \"├\", boxvR: \"╞\", boxVr: \"╟\", boxVR: \"╠\", bprime: \"‵\", breve: \"˘\", Breve: \"˘\", brvbar: \"¦\", bscr: \"𝒷\", Bscr: \"ℬ\", bsemi: \"⁏\", bsim: \"∽\", bsime: \"⋍\", bsolb: \"⧅\", bsol: \"\\\\\", bsolhsub: \"⟈\", bull: \"•\", bullet: \"•\", bump: \"≎\", bumpE: \"⪮\", bumpe: \"≏\", Bumpeq: \"≎\", bumpeq: \"≏\", Cacute: \"Ć\", cacute: \"ć\", capand: \"⩄\", capbrcup: \"⩉\", capcap: \"⩋\", cap: \"∩\", Cap: \"⋒\", capcup: \"⩇\", capdot: \"⩀\", CapitalDifferentialD: \"ⅅ\", caps: \"∩︀\", caret: \"⁁\", caron: \"ˇ\", Cayleys: \"ℭ\", ccaps: \"⩍\", Ccaron: \"Č\", ccaron: \"č\", Ccedil: \"Ç\", ccedil: \"ç\", Ccirc: \"Ĉ\", ccirc: \"ĉ\", Cconint: \"∰\", ccups: \"⩌\", ccupssm: \"⩐\", Cdot: \"Ċ\", cdot: \"ċ\", cedil: \"¸\", Cedilla: \"¸\", cemptyv: \"⦲\", cent: \"¢\", centerdot: \"·\", CenterDot: \"·\", cfr: \"𝔠\", Cfr: \"ℭ\", CHcy: \"Ч\", chcy: \"ч\", check: \"✓\", checkmark: \"✓\", Chi: \"Χ\", chi: \"χ\", circ: \"ˆ\", circeq: \"≗\", circlearrowleft: \"↺\", circlearrowright: \"↻\", circledast: \"⊛\", circledcirc: \"⊚\", circleddash: \"⊝\", CircleDot: \"⊙\", circledR: \"®\", circledS: \"Ⓢ\", CircleMinus: \"⊖\", CirclePlus: \"⊕\", CircleTimes: \"⊗\", cir: \"○\", cirE: \"⧃\", cire: \"≗\", cirfnint: \"⨐\", cirmid: \"⫯\", cirscir: \"⧂\", ClockwiseContourIntegral: \"∲\", CloseCurlyDoubleQuote: \"”\", CloseCurlyQuote: \"’\", clubs: \"♣\", clubsuit: \"♣\", colon: \":\", Colon: \"∷\", Colone: \"⩴\", colone: \"≔\", coloneq: \"≔\", comma: \",\", commat: \"@\", comp: \"∁\", compfn: \"∘\", complement: \"∁\", complexes: \"ℂ\", cong: \"≅\", congdot: \"⩭\", Congruent: \"≡\", conint: \"∮\", Conint: \"∯\", ContourIntegral: \"∮\", copf: \"𝕔\", Copf: \"ℂ\", coprod: \"∐\", Coproduct: \"∐\", copy: \"©\", COPY: \"©\", copysr: \"℗\", CounterClockwiseContourIntegral: \"∳\", crarr: \"↵\", cross: \"✗\", Cross: \"⨯\", Cscr: \"𝒞\", cscr: \"𝒸\", csub: \"⫏\", csube: \"⫑\", csup: \"⫐\", csupe: \"⫒\", ctdot: \"⋯\", cudarrl: \"⤸\", cudarrr: \"⤵\", cuepr: \"⋞\", cuesc: \"⋟\", cularr: \"↶\", cularrp: \"⤽\", cupbrcap: \"⩈\", cupcap: \"⩆\", CupCap: \"≍\", cup: \"∪\", Cup: \"⋓\", cupcup: \"⩊\", cupdot: \"⊍\", cupor: \"⩅\", cups: \"∪︀\", curarr: \"↷\", curarrm: \"⤼\", curlyeqprec: \"⋞\", curlyeqsucc: \"⋟\", curlyvee: \"⋎\", curlywedge: \"⋏\", curren: \"¤\", curvearrowleft: \"↶\", curvearrowright: \"↷\", cuvee: \"⋎\", cuwed: \"⋏\", cwconint: \"∲\", cwint: \"∱\", cylcty: \"⌭\", dagger: \"†\", Dagger: \"‡\", daleth: \"ℸ\", darr: \"↓\", Darr: \"↡\", dArr: \"⇓\", dash: \"‐\", Dashv: \"⫤\", dashv: \"⊣\", dbkarow: \"⤏\", dblac: \"˝\", Dcaron: \"Ď\", dcaron: \"ď\", Dcy: \"Д\", dcy: \"д\", ddagger: \"‡\", ddarr: \"⇊\", DD: \"ⅅ\", dd: \"ⅆ\", DDotrahd: \"⤑\", ddotseq: \"⩷\", deg: \"°\", Del: \"∇\", Delta: \"Δ\", delta: \"δ\", demptyv: \"⦱\", dfisht: \"⥿\", Dfr: \"𝔇\", dfr: \"𝔡\", dHar: \"⥥\", dharl: \"⇃\", dharr: \"⇂\", DiacriticalAcute: \"´\", DiacriticalDot: \"˙\", DiacriticalDoubleAcute: \"˝\", DiacriticalGrave: \"`\", DiacriticalTilde: \"˜\", diam: \"⋄\", diamond: \"⋄\", Diamond: \"⋄\", diamondsuit: \"♦\", diams: \"♦\", die: \"¨\", DifferentialD: \"ⅆ\", digamma: \"ϝ\", disin: \"⋲\", div: \"÷\", divide: \"÷\", divideontimes: \"⋇\", divonx: \"⋇\", DJcy: \"Ђ\", djcy: \"ђ\", dlcorn: \"⌞\", dlcrop: \"⌍\", dollar: \"$\", Dopf: \"𝔻\", dopf: \"𝕕\", Dot: \"¨\", dot: \"˙\", DotDot: \"⃜\", doteq: \"≐\", doteqdot: \"≑\", DotEqual: \"≐\", dotminus: \"∸\", dotplus: \"∔\", dotsquare: \"⊡\", doublebarwedge: \"⌆\", DoubleContourIntegral: \"∯\", DoubleDot: \"¨\", DoubleDownArrow: \"⇓\", DoubleLeftArrow: \"⇐\", DoubleLeftRightArrow: \"⇔\", DoubleLeftTee: \"⫤\", DoubleLongLeftArrow: \"⟸\", DoubleLongLeftRightArrow: \"⟺\", DoubleLongRightArrow: \"⟹\", DoubleRightArrow: \"⇒\", DoubleRightTee: \"⊨\", DoubleUpArrow: \"⇑\", DoubleUpDownArrow: \"⇕\", DoubleVerticalBar: \"∥\", DownArrowBar: \"⤓\", downarrow: \"↓\", DownArrow: \"↓\", Downarrow: \"⇓\", DownArrowUpArrow: \"⇵\", DownBreve: \"̑\", downdownarrows: \"⇊\", downharpoonleft: \"⇃\", downharpoonright: \"⇂\", DownLeftRightVector: \"⥐\", DownLeftTeeVector: \"⥞\", DownLeftVectorBar: \"⥖\", DownLeftVector: \"↽\", DownRightTeeVector: \"⥟\", DownRightVectorBar: \"⥗\", DownRightVector: \"⇁\", DownTeeArrow: \"↧\", DownTee: \"⊤\", drbkarow: \"⤐\", drcorn: \"⌟\", drcrop: \"⌌\", Dscr: \"𝒟\", dscr: \"𝒹\", DScy: \"Ѕ\", dscy: \"ѕ\", dsol: \"⧶\", Dstrok: \"Đ\", dstrok: \"đ\", dtdot: \"⋱\", dtri: \"▿\", dtrif: \"▾\", duarr: \"⇵\", duhar: \"⥯\", dwangle: \"⦦\", DZcy: \"Џ\", dzcy: \"џ\", dzigrarr: \"⟿\", Eacute: \"É\", eacute: \"é\", easter: \"⩮\", Ecaron: \"Ě\", ecaron: \"ě\", Ecirc: \"Ê\", ecirc: \"ê\", ecir: \"≖\", ecolon: \"≕\", Ecy: \"Э\", ecy: \"э\", eDDot: \"⩷\", Edot: \"Ė\", edot: \"ė\", eDot: \"≑\", ee: \"ⅇ\", efDot: \"≒\", Efr: \"𝔈\", efr: \"𝔢\", eg: \"⪚\", Egrave: \"È\", egrave: \"è\", egs: \"⪖\", egsdot: \"⪘\", el: \"⪙\", Element: \"∈\", elinters: \"⏧\", ell: \"ℓ\", els: \"⪕\", elsdot: \"⪗\", Emacr: \"Ē\", emacr: \"ē\", empty: \"∅\", emptyset: \"∅\", EmptySmallSquare: \"◻\", emptyv: \"∅\", EmptyVerySmallSquare: \"▫\", emsp13: \" \", emsp14: \" \", emsp: \" \", ENG: \"Ŋ\", eng: \"ŋ\", ensp: \" \", Eogon: \"Ę\", eogon: \"ę\", Eopf: \"𝔼\", eopf: \"𝕖\", epar: \"⋕\", eparsl: \"⧣\", eplus: \"⩱\", epsi: \"ε\", Epsilon: \"Ε\", epsilon: \"ε\", epsiv: \"ϵ\", eqcirc: \"≖\", eqcolon: \"≕\", eqsim: \"≂\", eqslantgtr: \"⪖\", eqslantless: \"⪕\", Equal: \"⩵\", equals: \"=\", EqualTilde: \"≂\", equest: \"≟\", Equilibrium: \"⇌\", equiv: \"≡\", equivDD: \"⩸\", eqvparsl: \"⧥\", erarr: \"⥱\", erDot: \"≓\", escr: \"ℯ\", Escr: \"ℰ\", esdot: \"≐\", Esim: \"⩳\", esim: \"≂\", Eta: \"Η\", eta: \"η\", ETH: \"Ð\", eth: \"ð\", Euml: \"Ë\", euml: \"ë\", euro: \"€\", excl: \"!\", exist: \"∃\", Exists: \"∃\", expectation: \"ℰ\", exponentiale: \"ⅇ\", ExponentialE: \"ⅇ\", fallingdotseq: \"≒\", Fcy: \"Ф\", fcy: \"ф\", female: \"♀\", ffilig: \"ﬃ\", fflig: \"ﬀ\", ffllig: \"ﬄ\", Ffr: \"𝔉\", ffr: \"𝔣\", filig: \"ﬁ\", FilledSmallSquare: \"◼\", FilledVerySmallSquare: \"▪\", fjlig: \"fj\", flat: \"♭\", fllig: \"ﬂ\", fltns: \"▱\", fnof: \"ƒ\", Fopf: \"𝔽\", fopf: \"𝕗\", forall: \"∀\", ForAll: \"∀\", fork: \"⋔\", forkv: \"⫙\", Fouriertrf: \"ℱ\", fpartint: \"⨍\", frac12: \"½\", frac13: \"⅓\", frac14: \"¼\", frac15: \"⅕\", frac16: \"⅙\", frac18: \"⅛\", frac23: \"⅔\", frac25: \"⅖\", frac34: \"¾\", frac35: \"⅗\", frac38: \"⅜\", frac45: \"⅘\", frac56: \"⅚\", frac58: \"⅝\", frac78: \"⅞\", frasl: \"⁄\", frown: \"⌢\", fscr: \"𝒻\", Fscr: \"ℱ\", gacute: \"ǵ\", Gamma: \"Γ\", gamma: \"γ\", Gammad: \"Ϝ\", gammad: \"ϝ\", gap: \"⪆\", Gbreve: \"Ğ\", gbreve: \"ğ\", Gcedil: \"Ģ\", Gcirc: \"Ĝ\", gcirc: \"ĝ\", Gcy: \"Г\", gcy: \"г\", Gdot: \"Ġ\", gdot: \"ġ\", ge: \"≥\", gE: \"≧\", gEl: \"⪌\", gel: \"⋛\", geq: \"≥\", geqq: \"≧\", geqslant: \"⩾\", gescc: \"⪩\", ges: \"⩾\", gesdot: \"⪀\", gesdoto: \"⪂\", gesdotol: \"⪄\", gesl: \"⋛︀\", gesles: \"⪔\", Gfr: \"𝔊\", gfr: \"𝔤\", gg: \"≫\", Gg: \"⋙\", ggg: \"⋙\", gimel: \"ℷ\", GJcy: \"Ѓ\", gjcy: \"ѓ\", gla: \"⪥\", gl: \"≷\", glE: \"⪒\", glj: \"⪤\", gnap: \"⪊\", gnapprox: \"⪊\", gne: \"⪈\", gnE: \"≩\", gneq: \"⪈\", gneqq: \"≩\", gnsim: \"⋧\", Gopf: \"𝔾\", gopf: \"𝕘\", grave: \"`\", GreaterEqual: \"≥\", GreaterEqualLess: \"⋛\", GreaterFullEqual: \"≧\", GreaterGreater: \"⪢\", GreaterLess: \"≷\", GreaterSlantEqual: \"⩾\", GreaterTilde: \"≳\", Gscr: \"𝒢\", gscr: \"ℊ\", gsim: \"≳\", gsime: \"⪎\", gsiml: \"⪐\", gtcc: \"⪧\", gtcir: \"⩺\", gt: \">\", GT: \">\", Gt: \"≫\", gtdot: \"⋗\", gtlPar: \"⦕\", gtquest: \"⩼\", gtrapprox: \"⪆\", gtrarr: \"⥸\", gtrdot: \"⋗\", gtreqless: \"⋛\", gtreqqless: \"⪌\", gtrless: \"≷\", gtrsim: \"≳\", gvertneqq: \"≩︀\", gvnE: \"≩︀\", Hacek: \"ˇ\", hairsp: \" \", half: \"½\", hamilt: \"ℋ\", HARDcy: \"Ъ\", hardcy: \"ъ\", harrcir: \"⥈\", harr: \"↔\", hArr: \"⇔\", harrw: \"↭\", Hat: \"^\", hbar: \"ℏ\", Hcirc: \"Ĥ\", hcirc: \"ĥ\", hearts: \"♥\", heartsuit: \"♥\", hellip: \"…\", hercon: \"⊹\", hfr: \"𝔥\", Hfr: \"ℌ\", HilbertSpace: \"ℋ\", hksearow: \"⤥\", hkswarow: \"⤦\", hoarr: \"⇿\", homtht: \"∻\", hookleftarrow: \"↩\", hookrightarrow: \"↪\", hopf: \"𝕙\", Hopf: \"ℍ\", horbar: \"―\", HorizontalLine: \"─\", hscr: \"𝒽\", Hscr: \"ℋ\", hslash: \"ℏ\", Hstrok: \"Ħ\", hstrok: \"ħ\", HumpDownHump: \"≎\", HumpEqual: \"≏\", hybull: \"⁃\", hyphen: \"‐\", Iacute: \"Í\", iacute: \"í\", ic: \"\\u2063\", Icirc: \"Î\", icirc: \"î\", Icy: \"И\", icy: \"и\", Idot: \"İ\", IEcy: \"Е\", iecy: \"е\", iexcl: \"¡\", iff: \"⇔\", ifr: \"𝔦\", Ifr: \"ℑ\", Igrave: \"Ì\", igrave: \"ì\", ii: \"ⅈ\", iiiint: \"⨌\", iiint: \"∭\", iinfin: \"⧜\", iiota: \"℩\", IJlig: \"Ĳ\", ijlig: \"ĳ\", Imacr: \"Ī\", imacr: \"ī\", image: \"ℑ\", ImaginaryI: \"ⅈ\", imagline: \"ℐ\", imagpart: \"ℑ\", imath: \"ı\", Im: \"ℑ\", imof: \"⊷\", imped: \"Ƶ\", Implies: \"⇒\", incare: \"℅\", in: \"∈\", infin: \"∞\", infintie: \"⧝\", inodot: \"ı\", intcal: \"⊺\", int: \"∫\", Int: \"∬\", integers: \"ℤ\", Integral: \"∫\", intercal: \"⊺\", Intersection: \"⋂\", intlarhk: \"⨗\", intprod: \"⨼\", InvisibleComma: \"\\u2063\", InvisibleTimes: \"\\u2062\", IOcy: \"Ё\", iocy: \"ё\", Iogon: \"Į\", iogon: \"į\", Iopf: \"𝕀\", iopf: \"𝕚\", Iota: \"Ι\", iota: \"ι\", iprod: \"⨼\", iquest: \"¿\", iscr: \"𝒾\", Iscr: \"ℐ\", isin: \"∈\", isindot: \"⋵\", isinE: \"⋹\", isins: \"⋴\", isinsv: \"⋳\", isinv: \"∈\", it: \"\\u2062\", Itilde: \"Ĩ\", itilde: \"ĩ\", Iukcy: \"І\", iukcy: \"і\", Iuml: \"Ï\", iuml: \"ï\", Jcirc: \"Ĵ\", jcirc: \"ĵ\", Jcy: \"Й\", jcy: \"й\", Jfr: \"𝔍\", jfr: \"𝔧\", jmath: \"ȷ\", Jopf: \"𝕁\", jopf: \"𝕛\", Jscr: \"𝒥\", jscr: \"𝒿\", Jsercy: \"Ј\", jsercy: \"ј\", Jukcy: \"Є\", jukcy: \"є\", Kappa: \"Κ\", kappa: \"κ\", kappav: \"ϰ\", Kcedil: \"Ķ\", kcedil: \"ķ\", Kcy: \"К\", kcy: \"к\", Kfr: \"𝔎\", kfr: \"𝔨\", kgreen: \"ĸ\", KHcy: \"Х\", khcy: \"х\", KJcy: \"Ќ\", kjcy: \"ќ\", Kopf: \"𝕂\", kopf: \"𝕜\", Kscr: \"𝒦\", kscr: \"𝓀\", lAarr: \"⇚\", Lacute: \"Ĺ\", lacute: \"ĺ\", laemptyv: \"⦴\", lagran: \"ℒ\", Lambda: \"Λ\", lambda: \"λ\", lang: \"⟨\", Lang: \"⟪\", langd: \"⦑\", langle: \"⟨\", lap: \"⪅\", Laplacetrf: \"ℒ\", laquo: \"«\", larrb: \"⇤\", larrbfs: \"⤟\", larr: \"←\", Larr: \"↞\", lArr: \"⇐\", larrfs: \"⤝\", larrhk: \"↩\", larrlp: \"↫\", larrpl: \"⤹\", larrsim: \"⥳\", larrtl: \"↢\", latail: \"⤙\", lAtail: \"⤛\", lat: \"⪫\", late: \"⪭\", lates: \"⪭︀\", lbarr: \"⤌\", lBarr: \"⤎\", lbbrk: \"❲\", lbrace: \"{\", lbrack: \"[\", lbrke: \"⦋\", lbrksld: \"⦏\", lbrkslu: \"⦍\", Lcaron: \"Ľ\", lcaron: \"ľ\", Lcedil: \"Ļ\", lcedil: \"ļ\", lceil: \"⌈\", lcub: \"{\", Lcy: \"Л\", lcy: \"л\", ldca: \"⤶\", ldquo: \"“\", ldquor: \"„\", ldrdhar: \"⥧\", ldrushar: \"⥋\", ldsh: \"↲\", le: \"≤\", lE: \"≦\", LeftAngleBracket: \"⟨\", LeftArrowBar: \"⇤\", leftarrow: \"←\", LeftArrow: \"←\", Leftarrow: \"⇐\", LeftArrowRightArrow: \"⇆\", leftarrowtail: \"↢\", LeftCeiling: \"⌈\", LeftDoubleBracket: \"⟦\", LeftDownTeeVector: \"⥡\", LeftDownVectorBar: \"⥙\", LeftDownVector: \"⇃\", LeftFloor: \"⌊\", leftharpoondown: \"↽\", leftharpoonup: \"↼\", leftleftarrows: \"⇇\", leftrightarrow: \"↔\", LeftRightArrow: \"↔\", Leftrightarrow: \"⇔\", leftrightarrows: \"⇆\", leftrightharpoons: \"⇋\", leftrightsquigarrow: \"↭\", LeftRightVector: \"⥎\", LeftTeeArrow: \"↤\", LeftTee: \"⊣\", LeftTeeVector: \"⥚\", leftthreetimes: \"⋋\", LeftTriangleBar: \"⧏\", LeftTriangle: \"⊲\", LeftTriangleEqual: \"⊴\", LeftUpDownVector: \"⥑\", LeftUpTeeVector: \"⥠\", LeftUpVectorBar: \"⥘\", LeftUpVector: \"↿\", LeftVectorBar: \"⥒\", LeftVector: \"↼\", lEg: \"⪋\", leg: \"⋚\", leq: \"≤\", leqq: \"≦\", leqslant: \"⩽\", lescc: \"⪨\", les: \"⩽\", lesdot: \"⩿\", lesdoto: \"⪁\", lesdotor: \"⪃\", lesg: \"⋚︀\", lesges: \"⪓\", lessapprox: \"⪅\", lessdot: \"⋖\", lesseqgtr: \"⋚\", lesseqqgtr: \"⪋\", LessEqualGreater: \"⋚\", LessFullEqual: \"≦\", LessGreater: \"≶\", lessgtr: \"≶\", LessLess: \"⪡\", lesssim: \"≲\", LessSlantEqual: \"⩽\", LessTilde: \"≲\", lfisht: \"⥼\", lfloor: \"⌊\", Lfr: \"𝔏\", lfr: \"𝔩\", lg: \"≶\", lgE: \"⪑\", lHar: \"⥢\", lhard: \"↽\", lharu: \"↼\", lharul: \"⥪\", lhblk: \"▄\", LJcy: \"Љ\", ljcy: \"љ\", llarr: \"⇇\", ll: \"≪\", Ll: \"⋘\", llcorner: \"⌞\", Lleftarrow: \"⇚\", llhard: \"⥫\", lltri: \"◺\", Lmidot: \"Ŀ\", lmidot: \"ŀ\", lmoustache: \"⎰\", lmoust: \"⎰\", lnap: \"⪉\", lnapprox: \"⪉\", lne: \"⪇\", lnE: \"≨\", lneq: \"⪇\", lneqq: \"≨\", lnsim: \"⋦\", loang: \"⟬\", loarr: \"⇽\", lobrk: \"⟦\", longleftarrow: \"⟵\", LongLeftArrow: \"⟵\", Longleftarrow: \"⟸\", longleftrightarrow: \"⟷\", LongLeftRightArrow: \"⟷\", Longleftrightarrow: \"⟺\", longmapsto: \"⟼\", longrightarrow: \"⟶\", LongRightArrow: \"⟶\", Longrightarrow: \"⟹\", looparrowleft: \"↫\", looparrowright: \"↬\", lopar: \"⦅\", Lopf: \"𝕃\", lopf: \"𝕝\", loplus: \"⨭\", lotimes: \"⨴\", lowast: \"∗\", lowbar: \"_\", LowerLeftArrow: \"↙\", LowerRightArrow: \"↘\", loz: \"◊\", lozenge: \"◊\", lozf: \"⧫\", lpar: \"(\", lparlt: \"⦓\", lrarr: \"⇆\", lrcorner: \"⌟\", lrhar: \"⇋\", lrhard: \"⥭\", lrm: \"\\u200e\", lrtri: \"⊿\", lsaquo: \"‹\", lscr: \"𝓁\", Lscr: \"ℒ\", lsh: \"↰\", Lsh: \"↰\", lsim: \"≲\", lsime: \"⪍\", lsimg: \"⪏\", lsqb: \"[\", lsquo: \"‘\", lsquor: \"‚\", Lstrok: \"Ł\", lstrok: \"ł\", ltcc: \"⪦\", ltcir: \"⩹\", lt: \"<\", LT: \"<\", Lt: \"≪\", ltdot: \"⋖\", lthree: \"⋋\", ltimes: \"⋉\", ltlarr: \"⥶\", ltquest: \"⩻\", ltri: \"◃\", ltrie: \"⊴\", ltrif: \"◂\", ltrPar: \"⦖\", lurdshar: \"⥊\", luruhar: \"⥦\", lvertneqq: \"≨︀\", lvnE: \"≨︀\", macr: \"¯\", male: \"♂\", malt: \"✠\", maltese: \"✠\", Map: \"⤅\", map: \"↦\", mapsto: \"↦\", mapstodown: \"↧\", mapstoleft: \"↤\", mapstoup: \"↥\", marker: \"▮\", mcomma: \"⨩\", Mcy: \"М\", mcy: \"м\", mdash: \"—\", mDDot: \"∺\", measuredangle: \"∡\", MediumSpace: \" \", Mellintrf: \"ℳ\", Mfr: \"𝔐\", mfr: \"𝔪\", mho: \"℧\", micro: \"µ\", midast: \"*\", midcir: \"⫰\", mid: \"∣\", middot: \"·\", minusb: \"⊟\", minus: \"−\", minusd: \"∸\", minusdu: \"⨪\", MinusPlus: \"∓\", mlcp: \"⫛\", mldr: \"…\", mnplus: \"∓\", models: \"⊧\", Mopf: \"𝕄\", mopf: \"𝕞\", mp: \"∓\", mscr: \"𝓂\", Mscr: \"ℳ\", mstpos: \"∾\", Mu: \"Μ\", mu: \"μ\", multimap: \"⊸\", mumap: \"⊸\", nabla: \"∇\", Nacute: \"Ń\", nacute: \"ń\", nang: \"∠⃒\", nap: \"≉\", napE: \"⩰̸\", napid: \"≋̸\", napos: \"ŉ\", napprox: \"≉\", natural: \"♮\", naturals: \"ℕ\", natur: \"♮\", nbsp: \" \", nbump: \"≎̸\", nbumpe: \"≏̸\", ncap: \"⩃\", Ncaron: \"Ň\", ncaron: \"ň\", Ncedil: \"Ņ\", ncedil: \"ņ\", ncong: \"≇\", ncongdot: \"⩭̸\", ncup: \"⩂\", Ncy: \"Н\", ncy: \"н\", ndash: \"–\", nearhk: \"⤤\", nearr: \"↗\", neArr: \"⇗\", nearrow: \"↗\", ne: \"≠\", nedot: \"≐̸\", NegativeMediumSpace: \"​\", NegativeThickSpace: \"​\", NegativeThinSpace: \"​\", NegativeVeryThinSpace: \"​\", nequiv: \"≢\", nesear: \"⤨\", nesim: \"≂̸\", NestedGreaterGreater: \"≫\", NestedLessLess: \"≪\", NewLine: \"\\u000a\", nexist: \"∄\", nexists: \"∄\", Nfr: \"𝔑\", nfr: \"𝔫\", ngE: \"≧̸\", nge: \"≱\", ngeq: \"≱\", ngeqq: \"≧̸\", ngeqslant: \"⩾̸\", nges: \"⩾̸\", nGg: \"⋙̸\", ngsim: \"≵\", nGt: \"≫⃒\", ngt: \"≯\", ngtr: \"≯\", nGtv: \"≫̸\", nharr: \"↮\", nhArr: \"⇎\", nhpar: \"⫲\", ni: \"∋\", nis: \"⋼\", nisd: \"⋺\", niv: \"∋\", NJcy: \"Њ\", njcy: \"њ\", nlarr: \"↚\", nlArr: \"⇍\", nldr: \"‥\", nlE: \"≦̸\", nle: \"≰\", nleftarrow: \"↚\", nLeftarrow: \"⇍\", nleftrightarrow: \"↮\", nLeftrightarrow: \"⇎\", nleq: \"≰\", nleqq: \"≦̸\", nleqslant: \"⩽̸\", nles: \"⩽̸\", nless: \"≮\", nLl: \"⋘̸\", nlsim: \"≴\", nLt: \"≪⃒\", nlt: \"≮\", nltri: \"⋪\", nltrie: \"⋬\", nLtv: \"≪̸\", nmid: \"∤\", NoBreak: \"\\u2060\", NonBreakingSpace: \" \", nopf: \"𝕟\", Nopf: \"ℕ\", Not: \"⫬\", not: \"¬\", NotCongruent: \"≢\", NotCupCap: \"≭\", NotDoubleVerticalBar: \"∦\", NotElement: \"∉\", NotEqual: \"≠\", NotEqualTilde: \"≂̸\", NotExists: \"∄\", NotGreater: \"≯\", NotGreaterEqual: \"≱\", NotGreaterFullEqual: \"≧̸\", NotGreaterGreater: \"≫̸\", NotGreaterLess: \"≹\", NotGreaterSlantEqual: \"⩾̸\", NotGreaterTilde: \"≵\", NotHumpDownHump: \"≎̸\", NotHumpEqual: \"≏̸\", notin: \"∉\", notindot: \"⋵̸\", notinE: \"⋹̸\", notinva: \"∉\", notinvb: \"⋷\", notinvc: \"⋶\", NotLeftTriangleBar: \"⧏̸\", NotLeftTriangle: \"⋪\", NotLeftTriangleEqual: \"⋬\", NotLess: \"≮\", NotLessEqual: \"≰\", NotLessGreater: \"≸\", NotLessLess: \"≪̸\", NotLessSlantEqual: \"⩽̸\", NotLessTilde: \"≴\", NotNestedGreaterGreater: \"⪢̸\", NotNestedLessLess: \"⪡̸\", notni: \"∌\", notniva: \"∌\", notnivb: \"⋾\", notnivc: \"⋽\", NotPrecedes: \"⊀\", NotPrecedesEqual: \"⪯̸\", NotPrecedesSlantEqual: \"⋠\", NotReverseElement: \"∌\", NotRightTriangleBar: \"⧐̸\", NotRightTriangle: \"⋫\", NotRightTriangleEqual: \"⋭\", NotSquareSubset: \"⊏̸\", NotSquareSubsetEqual: \"⋢\", NotSquareSuperset: \"⊐̸\", NotSquareSupersetEqual: \"⋣\", NotSubset: \"⊂⃒\", NotSubsetEqual: \"⊈\", NotSucceeds: \"⊁\", NotSucceedsEqual: \"⪰̸\", NotSucceedsSlantEqual: \"⋡\", NotSucceedsTilde: \"≿̸\", NotSuperset: \"⊃⃒\", NotSupersetEqual: \"⊉\", NotTilde: \"≁\", NotTildeEqual: \"≄\", NotTildeFullEqual: \"≇\", NotTildeTilde: \"≉\", NotVerticalBar: \"∤\", nparallel: \"∦\", npar: \"∦\", nparsl: \"⫽⃥\", npart: \"∂̸\", npolint: \"⨔\", npr: \"⊀\", nprcue: \"⋠\", nprec: \"⊀\", npreceq: \"⪯̸\", npre: \"⪯̸\", nrarrc: \"⤳̸\", nrarr: \"↛\", nrArr: \"⇏\", nrarrw: \"↝̸\", nrightarrow: \"↛\", nRightarrow: \"⇏\", nrtri: \"⋫\", nrtrie: \"⋭\", nsc: \"⊁\", nsccue: \"⋡\", nsce: \"⪰̸\", Nscr: \"𝒩\", nscr: \"𝓃\", nshortmid: \"∤\", nshortparallel: \"∦\", nsim: \"≁\", nsime: \"≄\", nsimeq: \"≄\", nsmid: \"∤\", nspar: \"∦\", nsqsube: \"⋢\", nsqsupe: \"⋣\", nsub: \"⊄\", nsubE: \"⫅̸\", nsube: \"⊈\", nsubset: \"⊂⃒\", nsubseteq: \"⊈\", nsubseteqq: \"⫅̸\", nsucc: \"⊁\", nsucceq: \"⪰̸\", nsup: \"⊅\", nsupE: \"⫆̸\", nsupe: \"⊉\", nsupset: \"⊃⃒\", nsupseteq: \"⊉\", nsupseteqq: \"⫆̸\", ntgl: \"≹\", Ntilde: \"Ñ\", ntilde: \"ñ\", ntlg: \"≸\", ntriangleleft: \"⋪\", ntrianglelefteq: \"⋬\", ntriangleright: \"⋫\", ntrianglerighteq: \"⋭\", Nu: \"Ν\", nu: \"ν\", num: \"#\", numero: \"№\", numsp: \" \", nvap: \"≍⃒\", nvdash: \"⊬\", nvDash: \"⊭\", nVdash: \"⊮\", nVDash: \"⊯\", nvge: \"≥⃒\", nvgt: \">⃒\", nvHarr: \"⤄\", nvinfin: \"⧞\", nvlArr: \"⤂\", nvle: \"≤⃒\", nvlt: \"<⃒\", nvltrie: \"⊴⃒\", nvrArr: \"⤃\", nvrtrie: \"⊵⃒\", nvsim: \"∼⃒\", nwarhk: \"⤣\", nwarr: \"↖\", nwArr: \"⇖\", nwarrow: \"↖\", nwnear: \"⤧\", Oacute: \"Ó\", oacute: \"ó\", oast: \"⊛\", Ocirc: \"Ô\", ocirc: \"ô\", ocir: \"⊚\", Ocy: \"О\", ocy: \"о\", odash: \"⊝\", Odblac: \"Ő\", odblac: \"ő\", odiv: \"⨸\", odot: \"⊙\", odsold: \"⦼\", OElig: \"Œ\", oelig: \"œ\", ofcir: \"⦿\", Ofr: \"𝔒\", ofr: \"𝔬\", ogon: \"˛\", Ograve: \"Ò\", ograve: \"ò\", ogt: \"⧁\", ohbar: \"⦵\", ohm: \"Ω\", oint: \"∮\", olarr: \"↺\", olcir: \"⦾\", olcross: \"⦻\", oline: \"‾\", olt: \"⧀\", Omacr: \"Ō\", omacr: \"ō\", Omega: \"Ω\", omega: \"ω\", Omicron: \"Ο\", omicron: \"ο\", omid: \"⦶\", ominus: \"⊖\", Oopf: \"𝕆\", oopf: \"𝕠\", opar: \"⦷\", OpenCurlyDoubleQuote: \"“\", OpenCurlyQuote: \"‘\", operp: \"⦹\", oplus: \"⊕\", orarr: \"↻\", Or: \"⩔\", or: \"∨\", ord: \"⩝\", order: \"ℴ\", orderof: \"ℴ\", ordf: \"ª\", ordm: \"º\", origof: \"⊶\", oror: \"⩖\", orslope: \"⩗\", orv: \"⩛\", oS: \"Ⓢ\", Oscr: \"𝒪\", oscr: \"ℴ\", Oslash: \"Ø\", oslash: \"ø\", osol: \"⊘\", Otilde: \"Õ\", otilde: \"õ\", otimesas: \"⨶\", Otimes: \"⨷\", otimes: \"⊗\", Ouml: \"Ö\", ouml: \"ö\", ovbar: \"⌽\", OverBar: \"‾\", OverBrace: \"⏞\", OverBracket: \"⎴\", OverParenthesis: \"⏜\", para: \"¶\", parallel: \"∥\", par: \"∥\", parsim: \"⫳\", parsl: \"⫽\", part: \"∂\", PartialD: \"∂\", Pcy: \"П\", pcy: \"п\", percnt: \"%\", period: \".\", permil: \"‰\", perp: \"⊥\", pertenk: \"‱\", Pfr: \"𝔓\", pfr: \"𝔭\", Phi: \"Φ\", phi: \"φ\", phiv: \"ϕ\", phmmat: \"ℳ\", phone: \"☎\", Pi: \"Π\", pi: \"π\", pitchfork: \"⋔\", piv: \"ϖ\", planck: \"ℏ\", planckh: \"ℎ\", plankv: \"ℏ\", plusacir: \"⨣\", plusb: \"⊞\", pluscir: \"⨢\", plus: \"+\", plusdo: \"∔\", plusdu: \"⨥\", pluse: \"⩲\", PlusMinus: \"±\", plusmn: \"±\", plussim: \"⨦\", plustwo: \"⨧\", pm: \"±\", Poincareplane: \"ℌ\", pointint: \"⨕\", popf: \"𝕡\", Popf: \"ℙ\", pound: \"£\", prap: \"⪷\", Pr: \"⪻\", pr: \"≺\", prcue: \"≼\", precapprox: \"⪷\", prec: \"≺\", preccurlyeq: \"≼\", Precedes: \"≺\", PrecedesEqual: \"⪯\", PrecedesSlantEqual: \"≼\", PrecedesTilde: \"≾\", preceq: \"⪯\", precnapprox: \"⪹\", precneqq: \"⪵\", precnsim: \"⋨\", pre: \"⪯\", prE: \"⪳\", precsim: \"≾\", prime: \"′\", Prime: \"″\", primes: \"ℙ\", prnap: \"⪹\", prnE: \"⪵\", prnsim: \"⋨\", prod: \"∏\", Product: \"∏\", profalar: \"⌮\", profline: \"⌒\", profsurf: \"⌓\", prop: \"∝\", Proportional: \"∝\", Proportion: \"∷\", propto: \"∝\", prsim: \"≾\", prurel: \"⊰\", Pscr: \"𝒫\", pscr: \"𝓅\", Psi: \"Ψ\", psi: \"ψ\", puncsp: \" \", Qfr: \"𝔔\", qfr: \"𝔮\", qint: \"⨌\", qopf: \"𝕢\", Qopf: \"ℚ\", qprime: \"⁗\", Qscr: \"𝒬\", qscr: \"𝓆\", quaternions: \"ℍ\", quatint: \"⨖\", quest: \"?\", questeq: \"≟\", quot: \"\\\"\", QUOT: \"\\\"\", rAarr: \"⇛\", race: \"∽̱\", Racute: \"Ŕ\", racute: \"ŕ\", radic: \"√\", raemptyv: \"⦳\", rang: \"⟩\", Rang: \"⟫\", rangd: \"⦒\", range: \"⦥\", rangle: \"⟩\", raquo: \"»\", rarrap: \"⥵\", rarrb: \"⇥\", rarrbfs: \"⤠\", rarrc: \"⤳\", rarr: \"→\", Rarr: \"↠\", rArr: \"⇒\", rarrfs: \"⤞\", rarrhk: \"↪\", rarrlp: \"↬\", rarrpl: \"⥅\", rarrsim: \"⥴\", Rarrtl: \"⤖\", rarrtl: \"↣\", rarrw: \"↝\", ratail: \"⤚\", rAtail: \"⤜\", ratio: \"∶\", rationals: \"ℚ\", rbarr: \"⤍\", rBarr: \"⤏\", RBarr: \"⤐\", rbbrk: \"❳\", rbrace: \"}\", rbrack: \"]\", rbrke: \"⦌\", rbrksld: \"⦎\", rbrkslu: \"⦐\", Rcaron: \"Ř\", rcaron: \"ř\", Rcedil: \"Ŗ\", rcedil: \"ŗ\", rceil: \"⌉\", rcub: \"}\", Rcy: \"Р\", rcy: \"р\", rdca: \"⤷\", rdldhar: \"⥩\", rdquo: \"”\", rdquor: \"”\", rdsh: \"↳\", real: \"ℜ\", realine: \"ℛ\", realpart: \"ℜ\", reals: \"ℝ\", Re: \"ℜ\", rect: \"▭\", reg: \"®\", REG: \"®\", ReverseElement: \"∋\", ReverseEquilibrium: \"⇋\", ReverseUpEquilibrium: \"⥯\", rfisht: \"⥽\", rfloor: \"⌋\", rfr: \"𝔯\", Rfr: \"ℜ\", rHar: \"⥤\", rhard: \"⇁\", rharu: \"⇀\", rharul: \"⥬\", Rho: \"Ρ\", rho: \"ρ\", rhov: \"ϱ\", RightAngleBracket: \"⟩\", RightArrowBar: \"⇥\", rightarrow: \"→\", RightArrow: \"→\", Rightarrow: \"⇒\", RightArrowLeftArrow: \"⇄\", rightarrowtail: \"↣\", RightCeiling: \"⌉\", RightDoubleBracket: \"⟧\", RightDownTeeVector: \"⥝\", RightDownVectorBar: \"⥕\", RightDownVector: \"⇂\", RightFloor: \"⌋\", rightharpoondown: \"⇁\", rightharpoonup: \"⇀\", rightleftarrows: \"⇄\", rightleftharpoons: \"⇌\", rightrightarrows: \"⇉\", rightsquigarrow: \"↝\", RightTeeArrow: \"↦\", RightTee: \"⊢\", RightTeeVector: \"⥛\", rightthreetimes: \"⋌\", RightTriangleBar: \"⧐\", RightTriangle: \"⊳\", RightTriangleEqual: \"⊵\", RightUpDownVector: \"⥏\", RightUpTeeVector: \"⥜\", RightUpVectorBar: \"⥔\", RightUpVector: \"↾\", RightVectorBar: \"⥓\", RightVector: \"⇀\", ring: \"˚\", risingdotseq: \"≓\", rlarr: \"⇄\", rlhar: \"⇌\", rlm: \"\\u200f\", rmoustache: \"⎱\", rmoust: \"⎱\", rnmid: \"⫮\", roang: \"⟭\", roarr: \"⇾\", robrk: \"⟧\", ropar: \"⦆\", ropf: \"𝕣\", Ropf: \"ℝ\", roplus: \"⨮\", rotimes: \"⨵\", RoundImplies: \"⥰\", rpar: \")\", rpargt: \"⦔\", rppolint: \"⨒\", rrarr: \"⇉\", Rrightarrow: \"⇛\", rsaquo: \"›\", rscr: \"𝓇\", Rscr: \"ℛ\", rsh: \"↱\", Rsh: \"↱\", rsqb: \"]\", rsquo: \"’\", rsquor: \"’\", rthree: \"⋌\", rtimes: \"⋊\", rtri: \"▹\", rtrie: \"⊵\", rtrif: \"▸\", rtriltri: \"⧎\", RuleDelayed: \"⧴\", ruluhar: \"⥨\", rx: \"℞\", Sacute: \"Ś\", sacute: \"ś\", sbquo: \"‚\", scap: \"⪸\", Scaron: \"Š\", scaron: \"š\", Sc: \"⪼\", sc: \"≻\", sccue: \"≽\", sce: \"⪰\", scE: \"⪴\", Scedil: \"Ş\", scedil: \"ş\", Scirc: \"Ŝ\", scirc: \"ŝ\", scnap: \"⪺\", scnE: \"⪶\", scnsim: \"⋩\", scpolint: \"⨓\", scsim: \"≿\", Scy: \"С\", scy: \"с\", sdotb: \"⊡\", sdot: \"⋅\", sdote: \"⩦\", searhk: \"⤥\", searr: \"↘\", seArr: \"⇘\", searrow: \"↘\", sect: \"§\", semi: \";\", seswar: \"⤩\", setminus: \"∖\", setmn: \"∖\", sext: \"✶\", Sfr: \"𝔖\", sfr: \"𝔰\", sfrown: \"⌢\", sharp: \"♯\", SHCHcy: \"Щ\", shchcy: \"щ\", SHcy: \"Ш\", shcy: \"ш\", ShortDownArrow: \"↓\", ShortLeftArrow: \"←\", shortmid: \"∣\", shortparallel: \"∥\", ShortRightArrow: \"→\", ShortUpArrow: \"↑\", shy: \"\\u00ad\", Sigma: \"Σ\", sigma: \"σ\", sigmaf: \"ς\", sigmav: \"ς\", sim: \"∼\", simdot: \"⩪\", sime: \"≃\", simeq: \"≃\", simg: \"⪞\", simgE: \"⪠\", siml: \"⪝\", simlE: \"⪟\", simne: \"≆\", simplus: \"⨤\", simrarr: \"⥲\", slarr: \"←\", SmallCircle: \"∘\", smallsetminus: \"∖\", smashp: \"⨳\", smeparsl: \"⧤\", smid: \"∣\", smile: \"⌣\", smt: \"⪪\", smte: \"⪬\", smtes: \"⪬︀\", SOFTcy: \"Ь\", softcy: \"ь\", solbar: \"⌿\", solb: \"⧄\", sol: \"/\", Sopf: \"𝕊\", sopf: \"𝕤\", spades: \"♠\", spadesuit: \"♠\", spar: \"∥\", sqcap: \"⊓\", sqcaps: \"⊓︀\", sqcup: \"⊔\", sqcups: \"⊔︀\", Sqrt: \"√\", sqsub: \"⊏\", sqsube: \"⊑\", sqsubset: \"⊏\", sqsubseteq: \"⊑\", sqsup: \"⊐\", sqsupe: \"⊒\", sqsupset: \"⊐\", sqsupseteq: \"⊒\", square: \"□\", Square: \"□\", SquareIntersection: \"⊓\", SquareSubset: \"⊏\", SquareSubsetEqual: \"⊑\", SquareSuperset: \"⊐\", SquareSupersetEqual: \"⊒\", SquareUnion: \"⊔\", squarf: \"▪\", squ: \"□\", squf: \"▪\", srarr: \"→\", Sscr: \"𝒮\", sscr: \"𝓈\", ssetmn: \"∖\", ssmile: \"⌣\", sstarf: \"⋆\", Star: \"⋆\", star: \"☆\", starf: \"★\", straightepsilon: \"ϵ\", straightphi: \"ϕ\", strns: \"¯\", sub: \"⊂\", Sub: \"⋐\", subdot: \"⪽\", subE: \"⫅\", sube: \"⊆\", subedot: \"⫃\", submult: \"⫁\", subnE: \"⫋\", subne: \"⊊\", subplus: \"⪿\", subrarr: \"⥹\", subset: \"⊂\", Subset: \"⋐\", subseteq: \"⊆\", subseteqq: \"⫅\", SubsetEqual: \"⊆\", subsetneq: \"⊊\", subsetneqq: \"⫋\", subsim: \"⫇\", subsub: \"⫕\", subsup: \"⫓\", succapprox: \"⪸\", succ: \"≻\", succcurlyeq: \"≽\", Succeeds: \"≻\", SucceedsEqual: \"⪰\", SucceedsSlantEqual: \"≽\", SucceedsTilde: \"≿\", succeq: \"⪰\", succnapprox: \"⪺\", succneqq: \"⪶\", succnsim: \"⋩\", succsim: \"≿\", SuchThat: \"∋\", sum: \"∑\", Sum: \"∑\", sung: \"♪\", sup1: \"¹\", sup2: \"²\", sup3: \"³\", sup: \"⊃\", Sup: \"⋑\", supdot: \"⪾\", supdsub: \"⫘\", supE: \"⫆\", supe: \"⊇\", supedot: \"⫄\", Superset: \"⊃\", SupersetEqual: \"⊇\", suphsol: \"⟉\", suphsub: \"⫗\", suplarr: \"⥻\", supmult: \"⫂\", supnE: \"⫌\", supne: \"⊋\", supplus: \"⫀\", supset: \"⊃\", Supset: \"⋑\", supseteq: \"⊇\", supseteqq: \"⫆\", supsetneq: \"⊋\", supsetneqq: \"⫌\", supsim: \"⫈\", supsub: \"⫔\", supsup: \"⫖\", swarhk: \"⤦\", swarr: \"↙\", swArr: \"⇙\", swarrow: \"↙\", swnwar: \"⤪\", szlig: \"ß\", Tab: \"\\u0009\", target: \"⌖\", Tau: \"Τ\", tau: \"τ\", tbrk: \"⎴\", Tcaron: \"Ť\", tcaron: \"ť\", Tcedil: \"Ţ\", tcedil: \"ţ\", Tcy: \"Т\", tcy: \"т\", tdot: \"⃛\", telrec: \"⌕\", Tfr: \"𝔗\", tfr: \"𝔱\", there4: \"∴\", therefore: \"∴\", Therefore: \"∴\", Theta: \"Θ\", theta: \"θ\", thetasym: \"ϑ\", thetav: \"ϑ\", thickapprox: \"≈\", thicksim: \"∼\", ThickSpace: \"  \", ThinSpace: \" \", thinsp: \" \", thkap: \"≈\", thksim: \"∼\", THORN: \"Þ\", thorn: \"þ\", tilde: \"˜\", Tilde: \"∼\", TildeEqual: \"≃\", TildeFullEqual: \"≅\", TildeTilde: \"≈\", timesbar: \"⨱\", timesb: \"⊠\", times: \"×\", timesd: \"⨰\", tint: \"∭\", toea: \"⤨\", topbot: \"⌶\", topcir: \"⫱\", top: \"⊤\", Topf: \"𝕋\", topf: \"𝕥\", topfork: \"⫚\", tosa: \"⤩\", tprime: \"‴\", trade: \"™\", TRADE: \"™\", triangle: \"▵\", triangledown: \"▿\", triangleleft: \"◃\", trianglelefteq: \"⊴\", triangleq: \"≜\", triangleright: \"▹\", trianglerighteq: \"⊵\", tridot: \"◬\", trie: \"≜\", triminus: \"⨺\", TripleDot: \"⃛\", triplus: \"⨹\", trisb: \"⧍\", tritime: \"⨻\", trpezium: \"⏢\", Tscr: \"𝒯\", tscr: \"𝓉\", TScy: \"Ц\", tscy: \"ц\", TSHcy: \"Ћ\", tshcy: \"ћ\", Tstrok: \"Ŧ\", tstrok: \"ŧ\", twixt: \"≬\", twoheadleftarrow: \"↞\", twoheadrightarrow: \"↠\", Uacute: \"Ú\", uacute: \"ú\", uarr: \"↑\", Uarr: \"↟\", uArr: \"⇑\", Uarrocir: \"⥉\", Ubrcy: \"Ў\", ubrcy: \"ў\", Ubreve: \"Ŭ\", ubreve: \"ŭ\", Ucirc: \"Û\", ucirc: \"û\", Ucy: \"У\", ucy: \"у\", udarr: \"⇅\", Udblac: \"Ű\", udblac: \"ű\", udhar: \"⥮\", ufisht: \"⥾\", Ufr: \"𝔘\", ufr: \"𝔲\", Ugrave: \"Ù\", ugrave: \"ù\", uHar: \"⥣\", uharl: \"↿\", uharr: \"↾\", uhblk: \"▀\", ulcorn: \"⌜\", ulcorner: \"⌜\", ulcrop: \"⌏\", ultri: \"◸\", Umacr: \"Ū\", umacr: \"ū\", uml: \"¨\", UnderBar: \"_\", UnderBrace: \"⏟\", UnderBracket: \"⎵\", UnderParenthesis: \"⏝\", Union: \"⋃\", UnionPlus: \"⊎\", Uogon: \"Ų\", uogon: \"ų\", Uopf: \"𝕌\", uopf: \"𝕦\", UpArrowBar: \"⤒\", uparrow: \"↑\", UpArrow: \"↑\", Uparrow: \"⇑\", UpArrowDownArrow: \"⇅\", updownarrow: \"↕\", UpDownArrow: \"↕\", Updownarrow: \"⇕\", UpEquilibrium: \"⥮\", upharpoonleft: \"↿\", upharpoonright: \"↾\", uplus: \"⊎\", UpperLeftArrow: \"↖\", UpperRightArrow: \"↗\", upsi: \"υ\", Upsi: \"ϒ\", upsih: \"ϒ\", Upsilon: \"Υ\", upsilon: \"υ\", UpTeeArrow: \"↥\", UpTee: \"⊥\", upuparrows: \"⇈\", urcorn: \"⌝\", urcorner: \"⌝\", urcrop: \"⌎\", Uring: \"Ů\", uring: \"ů\", urtri: \"◹\", Uscr: \"𝒰\", uscr: \"𝓊\", utdot: \"⋰\", Utilde: \"Ũ\", utilde: \"ũ\", utri: \"▵\", utrif: \"▴\", uuarr: \"⇈\", Uuml: \"Ü\", uuml: \"ü\", uwangle: \"⦧\", vangrt: \"⦜\", varepsilon: \"ϵ\", varkappa: \"ϰ\", varnothing: \"∅\", varphi: \"ϕ\", varpi: \"ϖ\", varpropto: \"∝\", varr: \"↕\", vArr: \"⇕\", varrho: \"ϱ\", varsigma: \"ς\", varsubsetneq: \"⊊︀\", varsubsetneqq: \"⫋︀\", varsupsetneq: \"⊋︀\", varsupsetneqq: \"⫌︀\", vartheta: \"ϑ\", vartriangleleft: \"⊲\", vartriangleright: \"⊳\", vBar: \"⫨\", Vbar: \"⫫\", vBarv: \"⫩\", Vcy: \"В\", vcy: \"в\", vdash: \"⊢\", vDash: \"⊨\", Vdash: \"⊩\", VDash: \"⊫\", Vdashl: \"⫦\", veebar: \"⊻\", vee: \"∨\", Vee: \"⋁\", veeeq: \"≚\", vellip: \"⋮\", verbar: \"|\", Verbar: \"‖\", vert: \"|\", Vert: \"‖\", VerticalBar: \"∣\", VerticalLine: \"|\", VerticalSeparator: \"❘\", VerticalTilde: \"≀\", VeryThinSpace: \" \", Vfr: \"𝔙\", vfr: \"𝔳\", vltri: \"⊲\", vnsub: \"⊂⃒\", vnsup: \"⊃⃒\", Vopf: \"𝕍\", vopf: \"𝕧\", vprop: \"∝\", vrtri: \"⊳\", Vscr: \"𝒱\", vscr: \"𝓋\", vsubnE: \"⫋︀\", vsubne: \"⊊︀\", vsupnE: \"⫌︀\", vsupne: \"⊋︀\", Vvdash: \"⊪\", vzigzag: \"⦚\", Wcirc: \"Ŵ\", wcirc: \"ŵ\", wedbar: \"⩟\", wedge: \"∧\", Wedge: \"⋀\", wedgeq: \"≙\", weierp: \"℘\", Wfr: \"𝔚\", wfr: \"𝔴\", Wopf: \"𝕎\", wopf: \"𝕨\", wp: \"℘\", wr: \"≀\", wreath: \"≀\", Wscr: \"𝒲\", wscr: \"𝓌\", xcap: \"⋂\", xcirc: \"◯\", xcup: \"⋃\", xdtri: \"▽\", Xfr: \"𝔛\", xfr: \"𝔵\", xharr: \"⟷\", xhArr: \"⟺\", Xi: \"Ξ\", xi: \"ξ\", xlarr: \"⟵\", xlArr: \"⟸\", xmap: \"⟼\", xnis: \"⋻\", xodot: \"⨀\", Xopf: \"𝕏\", xopf: \"𝕩\", xoplus: \"⨁\", xotime: \"⨂\", xrarr: \"⟶\", xrArr: \"⟹\", Xscr: \"𝒳\", xscr: \"𝓍\", xsqcup: \"⨆\", xuplus: \"⨄\", xutri: \"△\", xvee: \"⋁\", xwedge: \"⋀\", Yacute: \"Ý\", yacute: \"ý\", YAcy: \"Я\", yacy: \"я\", Ycirc: \"Ŷ\", ycirc: \"ŷ\", Ycy: \"Ы\", ycy: \"ы\", yen: \"¥\", Yfr: \"𝔜\", yfr: \"𝔶\", YIcy: \"Ї\", yicy: \"ї\", Yopf: \"𝕐\", yopf: \"𝕪\", Yscr: \"𝒴\", yscr: \"𝓎\", YUcy: \"Ю\", yucy: \"ю\", yuml: \"ÿ\", Yuml: \"Ÿ\", Zacute: \"Ź\", zacute: \"ź\", Zcaron: \"Ž\", zcaron: \"ž\", Zcy: \"З\", zcy: \"з\", Zdot: \"Ż\", zdot: \"ż\", zeetrf: \"ℨ\", ZeroWidthSpace: \"​\", Zeta: \"Ζ\", zeta: \"ζ\", zfr: \"𝔷\", Zfr: \"ℨ\", ZHcy: \"Ж\", zhcy: \"ж\", zigrarr: \"⇝\", zopf: \"𝕫\", Zopf: \"ℤ\", Zscr: \"𝒵\", zscr: \"𝓏\", zwj: \"\\u200d\", zwnj: \"\\u200c\"\n};\n\nvar HEXCHARCODE = /^#[xX]([A-Fa-f0-9]+)$/;\nvar CHARCODE = /^#([0-9]+)$/;\nvar NAMED = /^([A-Za-z0-9]+)$/;\nvar EntityParser = /** @class */ (function () {\n    function EntityParser(named) {\n        this.named = named;\n    }\n    EntityParser.prototype.parse = function (entity) {\n        if (!entity) {\n            return;\n        }\n        var matches = entity.match(HEXCHARCODE);\n        if (matches) {\n            return String.fromCharCode(parseInt(matches[1], 16));\n        }\n        matches = entity.match(CHARCODE);\n        if (matches) {\n            return String.fromCharCode(parseInt(matches[1], 10));\n        }\n        matches = entity.match(NAMED);\n        if (matches) {\n            return this.named[matches[1]];\n        }\n    };\n    return EntityParser;\n}());\n\nvar WSP = /[\\t\\n\\f ]/;\nvar ALPHA = /[A-Za-z]/;\nvar CRLF = /\\r\\n?/g;\nfunction isSpace(char) {\n    return WSP.test(char);\n}\nfunction isAlpha(char) {\n    return ALPHA.test(char);\n}\nfunction preprocessInput(input) {\n    return input.replace(CRLF, '\\n');\n}\n\nvar EventedTokenizer = /** @class */ (function () {\n    function EventedTokenizer(delegate, entityParser, mode) {\n        if (mode === void 0) { mode = 'precompile'; }\n        this.delegate = delegate;\n        this.entityParser = entityParser;\n        this.mode = mode;\n        this.state = \"beforeData\" /* beforeData */;\n        this.line = -1;\n        this.column = -1;\n        this.input = '';\n        this.index = -1;\n        this.tagNameBuffer = '';\n        this.states = {\n            beforeData: function () {\n                var char = this.peek();\n                if (char === '<' && !this.isIgnoredEndTag()) {\n                    this.transitionTo(\"tagOpen\" /* tagOpen */);\n                    this.markTagStart();\n                    this.consume();\n                }\n                else {\n                    if (this.mode === 'precompile' && char === '\\n') {\n                        var tag = this.tagNameBuffer.toLowerCase();\n                        if (tag === 'pre' || tag === 'textarea') {\n                            this.consume();\n                        }\n                    }\n                    this.transitionTo(\"data\" /* data */);\n                    this.delegate.beginData();\n                }\n            },\n            data: function () {\n                var char = this.peek();\n                var tag = this.tagNameBuffer;\n                if (char === '<' && !this.isIgnoredEndTag()) {\n                    this.delegate.finishData();\n                    this.transitionTo(\"tagOpen\" /* tagOpen */);\n                    this.markTagStart();\n                    this.consume();\n                }\n                else if (char === '&' && tag !== 'script' && tag !== 'style') {\n                    this.consume();\n                    this.delegate.appendToData(this.consumeCharRef() || '&');\n                }\n                else {\n                    this.consume();\n                    this.delegate.appendToData(char);\n                }\n            },\n            tagOpen: function () {\n                var char = this.consume();\n                if (char === '!') {\n                    this.transitionTo(\"markupDeclarationOpen\" /* markupDeclarationOpen */);\n                }\n                else if (char === '/') {\n                    this.transitionTo(\"endTagOpen\" /* endTagOpen */);\n                }\n                else if (char === '@' || char === ':' || isAlpha(char)) {\n                    this.transitionTo(\"tagName\" /* tagName */);\n                    this.tagNameBuffer = '';\n                    this.delegate.beginStartTag();\n                    this.appendToTagName(char);\n                }\n            },\n            markupDeclarationOpen: function () {\n                var char = this.consume();\n                if (char === '-' && this.peek() === '-') {\n                    this.consume();\n                    this.transitionTo(\"commentStart\" /* commentStart */);\n                    this.delegate.beginComment();\n                }\n                else {\n                    var maybeDoctype = char.toUpperCase() + this.input.substring(this.index, this.index + 6).toUpperCase();\n                    if (maybeDoctype === 'DOCTYPE') {\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                        this.transitionTo(\"doctype\" /* doctype */);\n                        if (this.delegate.beginDoctype)\n                            this.delegate.beginDoctype();\n                    }\n                }\n            },\n            doctype: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    this.transitionTo(\"beforeDoctypeName\" /* beforeDoctypeName */);\n                }\n            },\n            beforeDoctypeName: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    return;\n                }\n                else {\n                    this.transitionTo(\"doctypeName\" /* doctypeName */);\n                    if (this.delegate.appendToDoctypeName)\n                        this.delegate.appendToDoctypeName(char.toLowerCase());\n                }\n            },\n            doctypeName: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    this.transitionTo(\"afterDoctypeName\" /* afterDoctypeName */);\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    if (this.delegate.appendToDoctypeName)\n                        this.delegate.appendToDoctypeName(char.toLowerCase());\n                }\n            },\n            afterDoctypeName: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    return;\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    var nextSixChars = char.toUpperCase() + this.input.substring(this.index, this.index + 5).toUpperCase();\n                    var isPublic = nextSixChars.toUpperCase() === 'PUBLIC';\n                    var isSystem = nextSixChars.toUpperCase() === 'SYSTEM';\n                    if (isPublic || isSystem) {\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                        this.consume();\n                    }\n                    if (isPublic) {\n                        this.transitionTo(\"afterDoctypePublicKeyword\" /* afterDoctypePublicKeyword */);\n                    }\n                    else if (isSystem) {\n                        this.transitionTo(\"afterDoctypeSystemKeyword\" /* afterDoctypeSystemKeyword */);\n                    }\n                }\n            },\n            afterDoctypePublicKeyword: function () {\n                var char = this.peek();\n                if (isSpace(char)) {\n                    this.transitionTo(\"beforeDoctypePublicIdentifier\" /* beforeDoctypePublicIdentifier */);\n                    this.consume();\n                }\n                else if (char === '\"') {\n                    this.transitionTo(\"doctypePublicIdentifierDoubleQuoted\" /* doctypePublicIdentifierDoubleQuoted */);\n                    this.consume();\n                }\n                else if (char === \"'\") {\n                    this.transitionTo(\"doctypePublicIdentifierSingleQuoted\" /* doctypePublicIdentifierSingleQuoted */);\n                    this.consume();\n                }\n                else if (char === '>') {\n                    this.consume();\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n            },\n            doctypePublicIdentifierDoubleQuoted: function () {\n                var char = this.consume();\n                if (char === '\"') {\n                    this.transitionTo(\"afterDoctypePublicIdentifier\" /* afterDoctypePublicIdentifier */);\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    if (this.delegate.appendToDoctypePublicIdentifier)\n                        this.delegate.appendToDoctypePublicIdentifier(char);\n                }\n            },\n            doctypePublicIdentifierSingleQuoted: function () {\n                var char = this.consume();\n                if (char === \"'\") {\n                    this.transitionTo(\"afterDoctypePublicIdentifier\" /* afterDoctypePublicIdentifier */);\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    if (this.delegate.appendToDoctypePublicIdentifier)\n                        this.delegate.appendToDoctypePublicIdentifier(char);\n                }\n            },\n            afterDoctypePublicIdentifier: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    this.transitionTo(\"betweenDoctypePublicAndSystemIdentifiers\" /* betweenDoctypePublicAndSystemIdentifiers */);\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else if (char === '\"') {\n                    this.transitionTo(\"doctypeSystemIdentifierDoubleQuoted\" /* doctypeSystemIdentifierDoubleQuoted */);\n                }\n                else if (char === \"'\") {\n                    this.transitionTo(\"doctypeSystemIdentifierSingleQuoted\" /* doctypeSystemIdentifierSingleQuoted */);\n                }\n            },\n            betweenDoctypePublicAndSystemIdentifiers: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    return;\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else if (char === '\"') {\n                    this.transitionTo(\"doctypeSystemIdentifierDoubleQuoted\" /* doctypeSystemIdentifierDoubleQuoted */);\n                }\n                else if (char === \"'\") {\n                    this.transitionTo(\"doctypeSystemIdentifierSingleQuoted\" /* doctypeSystemIdentifierSingleQuoted */);\n                }\n            },\n            doctypeSystemIdentifierDoubleQuoted: function () {\n                var char = this.consume();\n                if (char === '\"') {\n                    this.transitionTo(\"afterDoctypeSystemIdentifier\" /* afterDoctypeSystemIdentifier */);\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    if (this.delegate.appendToDoctypeSystemIdentifier)\n                        this.delegate.appendToDoctypeSystemIdentifier(char);\n                }\n            },\n            doctypeSystemIdentifierSingleQuoted: function () {\n                var char = this.consume();\n                if (char === \"'\") {\n                    this.transitionTo(\"afterDoctypeSystemIdentifier\" /* afterDoctypeSystemIdentifier */);\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    if (this.delegate.appendToDoctypeSystemIdentifier)\n                        this.delegate.appendToDoctypeSystemIdentifier(char);\n                }\n            },\n            afterDoctypeSystemIdentifier: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    return;\n                }\n                else if (char === '>') {\n                    if (this.delegate.endDoctype)\n                        this.delegate.endDoctype();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n            },\n            commentStart: function () {\n                var char = this.consume();\n                if (char === '-') {\n                    this.transitionTo(\"commentStartDash\" /* commentStartDash */);\n                }\n                else if (char === '>') {\n                    this.delegate.finishComment();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.delegate.appendToCommentData(char);\n                    this.transitionTo(\"comment\" /* comment */);\n                }\n            },\n            commentStartDash: function () {\n                var char = this.consume();\n                if (char === '-') {\n                    this.transitionTo(\"commentEnd\" /* commentEnd */);\n                }\n                else if (char === '>') {\n                    this.delegate.finishComment();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.delegate.appendToCommentData('-');\n                    this.transitionTo(\"comment\" /* comment */);\n                }\n            },\n            comment: function () {\n                var char = this.consume();\n                if (char === '-') {\n                    this.transitionTo(\"commentEndDash\" /* commentEndDash */);\n                }\n                else {\n                    this.delegate.appendToCommentData(char);\n                }\n            },\n            commentEndDash: function () {\n                var char = this.consume();\n                if (char === '-') {\n                    this.transitionTo(\"commentEnd\" /* commentEnd */);\n                }\n                else {\n                    this.delegate.appendToCommentData('-' + char);\n                    this.transitionTo(\"comment\" /* comment */);\n                }\n            },\n            commentEnd: function () {\n                var char = this.consume();\n                if (char === '>') {\n                    this.delegate.finishComment();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.delegate.appendToCommentData('--' + char);\n                    this.transitionTo(\"comment\" /* comment */);\n                }\n            },\n            tagName: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n                }\n                else if (char === '/') {\n                    this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n                }\n                else if (char === '>') {\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.appendToTagName(char);\n                }\n            },\n            endTagName: function () {\n                var char = this.consume();\n                if (isSpace(char)) {\n                    this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n                    this.tagNameBuffer = '';\n                }\n                else if (char === '/') {\n                    this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n                    this.tagNameBuffer = '';\n                }\n                else if (char === '>') {\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                    this.tagNameBuffer = '';\n                }\n                else {\n                    this.appendToTagName(char);\n                }\n            },\n            beforeAttributeName: function () {\n                var char = this.peek();\n                if (isSpace(char)) {\n                    this.consume();\n                    return;\n                }\n                else if (char === '/') {\n                    this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n                    this.consume();\n                }\n                else if (char === '>') {\n                    this.consume();\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else if (char === '=') {\n                    this.delegate.reportSyntaxError('attribute name cannot start with equals sign');\n                    this.transitionTo(\"attributeName\" /* attributeName */);\n                    this.delegate.beginAttribute();\n                    this.consume();\n                    this.delegate.appendToAttributeName(char);\n                }\n                else {\n                    this.transitionTo(\"attributeName\" /* attributeName */);\n                    this.delegate.beginAttribute();\n                }\n            },\n            attributeName: function () {\n                var char = this.peek();\n                if (isSpace(char)) {\n                    this.transitionTo(\"afterAttributeName\" /* afterAttributeName */);\n                    this.consume();\n                }\n                else if (char === '/') {\n                    this.delegate.beginAttributeValue(false);\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n                }\n                else if (char === '=') {\n                    this.transitionTo(\"beforeAttributeValue\" /* beforeAttributeValue */);\n                    this.consume();\n                }\n                else if (char === '>') {\n                    this.delegate.beginAttributeValue(false);\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else if (char === '\"' || char === \"'\" || char === '<') {\n                    this.delegate.reportSyntaxError(char + ' is not a valid character within attribute names');\n                    this.consume();\n                    this.delegate.appendToAttributeName(char);\n                }\n                else {\n                    this.consume();\n                    this.delegate.appendToAttributeName(char);\n                }\n            },\n            afterAttributeName: function () {\n                var char = this.peek();\n                if (isSpace(char)) {\n                    this.consume();\n                    return;\n                }\n                else if (char === '/') {\n                    this.delegate.beginAttributeValue(false);\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n                }\n                else if (char === '=') {\n                    this.consume();\n                    this.transitionTo(\"beforeAttributeValue\" /* beforeAttributeValue */);\n                }\n                else if (char === '>') {\n                    this.delegate.beginAttributeValue(false);\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.delegate.beginAttributeValue(false);\n                    this.delegate.finishAttributeValue();\n                    this.transitionTo(\"attributeName\" /* attributeName */);\n                    this.delegate.beginAttribute();\n                    this.consume();\n                    this.delegate.appendToAttributeName(char);\n                }\n            },\n            beforeAttributeValue: function () {\n                var char = this.peek();\n                if (isSpace(char)) {\n                    this.consume();\n                }\n                else if (char === '\"') {\n                    this.transitionTo(\"attributeValueDoubleQuoted\" /* attributeValueDoubleQuoted */);\n                    this.delegate.beginAttributeValue(true);\n                    this.consume();\n                }\n                else if (char === \"'\") {\n                    this.transitionTo(\"attributeValueSingleQuoted\" /* attributeValueSingleQuoted */);\n                    this.delegate.beginAttributeValue(true);\n                    this.consume();\n                }\n                else if (char === '>') {\n                    this.delegate.beginAttributeValue(false);\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.transitionTo(\"attributeValueUnquoted\" /* attributeValueUnquoted */);\n                    this.delegate.beginAttributeValue(false);\n                    this.consume();\n                    this.delegate.appendToAttributeValue(char);\n                }\n            },\n            attributeValueDoubleQuoted: function () {\n                var char = this.consume();\n                if (char === '\"') {\n                    this.delegate.finishAttributeValue();\n                    this.transitionTo(\"afterAttributeValueQuoted\" /* afterAttributeValueQuoted */);\n                }\n                else if (char === '&') {\n                    this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n                }\n                else {\n                    this.delegate.appendToAttributeValue(char);\n                }\n            },\n            attributeValueSingleQuoted: function () {\n                var char = this.consume();\n                if (char === \"'\") {\n                    this.delegate.finishAttributeValue();\n                    this.transitionTo(\"afterAttributeValueQuoted\" /* afterAttributeValueQuoted */);\n                }\n                else if (char === '&') {\n                    this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n                }\n                else {\n                    this.delegate.appendToAttributeValue(char);\n                }\n            },\n            attributeValueUnquoted: function () {\n                var char = this.peek();\n                if (isSpace(char)) {\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n                }\n                else if (char === '/') {\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n                }\n                else if (char === '&') {\n                    this.consume();\n                    this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n                }\n                else if (char === '>') {\n                    this.delegate.finishAttributeValue();\n                    this.consume();\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.consume();\n                    this.delegate.appendToAttributeValue(char);\n                }\n            },\n            afterAttributeValueQuoted: function () {\n                var char = this.peek();\n                if (isSpace(char)) {\n                    this.consume();\n                    this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n                }\n                else if (char === '/') {\n                    this.consume();\n                    this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n                }\n                else if (char === '>') {\n                    this.consume();\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n                }\n            },\n            selfClosingStartTag: function () {\n                var char = this.peek();\n                if (char === '>') {\n                    this.consume();\n                    this.delegate.markTagAsSelfClosing();\n                    this.delegate.finishTag();\n                    this.transitionTo(\"beforeData\" /* beforeData */);\n                }\n                else {\n                    this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n                }\n            },\n            endTagOpen: function () {\n                var char = this.consume();\n                if (char === '@' || char === ':' || isAlpha(char)) {\n                    this.transitionTo(\"endTagName\" /* endTagName */);\n                    this.tagNameBuffer = '';\n                    this.delegate.beginEndTag();\n                    this.appendToTagName(char);\n                }\n            }\n        };\n        this.reset();\n    }\n    EventedTokenizer.prototype.reset = function () {\n        this.transitionTo(\"beforeData\" /* beforeData */);\n        this.input = '';\n        this.tagNameBuffer = '';\n        this.index = 0;\n        this.line = 1;\n        this.column = 0;\n        this.delegate.reset();\n    };\n    EventedTokenizer.prototype.transitionTo = function (state) {\n        this.state = state;\n    };\n    EventedTokenizer.prototype.tokenize = function (input) {\n        this.reset();\n        this.tokenizePart(input);\n        this.tokenizeEOF();\n    };\n    EventedTokenizer.prototype.tokenizePart = function (input) {\n        this.input += preprocessInput(input);\n        while (this.index < this.input.length) {\n            var handler = this.states[this.state];\n            if (handler !== undefined) {\n                handler.call(this);\n            }\n            else {\n                throw new Error(\"unhandled state \" + this.state);\n            }\n        }\n    };\n    EventedTokenizer.prototype.tokenizeEOF = function () {\n        this.flushData();\n    };\n    EventedTokenizer.prototype.flushData = function () {\n        if (this.state === 'data') {\n            this.delegate.finishData();\n            this.transitionTo(\"beforeData\" /* beforeData */);\n        }\n    };\n    EventedTokenizer.prototype.peek = function () {\n        return this.input.charAt(this.index);\n    };\n    EventedTokenizer.prototype.consume = function () {\n        var char = this.peek();\n        this.index++;\n        if (char === '\\n') {\n            this.line++;\n            this.column = 0;\n        }\n        else {\n            this.column++;\n        }\n        return char;\n    };\n    EventedTokenizer.prototype.consumeCharRef = function () {\n        var endIndex = this.input.indexOf(';', this.index);\n        if (endIndex === -1) {\n            return;\n        }\n        var entity = this.input.slice(this.index, endIndex);\n        var chars = this.entityParser.parse(entity);\n        if (chars) {\n            var count = entity.length;\n            // consume the entity chars\n            while (count) {\n                this.consume();\n                count--;\n            }\n            // consume the `;`\n            this.consume();\n            return chars;\n        }\n    };\n    EventedTokenizer.prototype.markTagStart = function () {\n        this.delegate.tagOpen();\n    };\n    EventedTokenizer.prototype.appendToTagName = function (char) {\n        this.tagNameBuffer += char;\n        this.delegate.appendToTagName(char);\n    };\n    EventedTokenizer.prototype.isIgnoredEndTag = function () {\n        var tag = this.tagNameBuffer;\n        return (tag === 'title' && this.input.substring(this.index, this.index + 8) !== '</title>') ||\n            (tag === 'style' && this.input.substring(this.index, this.index + 8) !== '</style>') ||\n            (tag === 'script' && this.input.substring(this.index, this.index + 9) !== '</script>');\n    };\n    return EventedTokenizer;\n}());\n\nvar Tokenizer = /** @class */ (function () {\n    function Tokenizer(entityParser, options) {\n        if (options === void 0) { options = {}; }\n        this.options = options;\n        this.token = null;\n        this.startLine = 1;\n        this.startColumn = 0;\n        this.tokens = [];\n        this.tokenizer = new EventedTokenizer(this, entityParser, options.mode);\n        this._currentAttribute = undefined;\n    }\n    Tokenizer.prototype.tokenize = function (input) {\n        this.tokens = [];\n        this.tokenizer.tokenize(input);\n        return this.tokens;\n    };\n    Tokenizer.prototype.tokenizePart = function (input) {\n        this.tokens = [];\n        this.tokenizer.tokenizePart(input);\n        return this.tokens;\n    };\n    Tokenizer.prototype.tokenizeEOF = function () {\n        this.tokens = [];\n        this.tokenizer.tokenizeEOF();\n        return this.tokens[0];\n    };\n    Tokenizer.prototype.reset = function () {\n        this.token = null;\n        this.startLine = 1;\n        this.startColumn = 0;\n    };\n    Tokenizer.prototype.current = function () {\n        var token = this.token;\n        if (token === null) {\n            throw new Error('token was unexpectedly null');\n        }\n        if (arguments.length === 0) {\n            return token;\n        }\n        for (var i = 0; i < arguments.length; i++) {\n            if (token.type === arguments[i]) {\n                return token;\n            }\n        }\n        throw new Error(\"token type was unexpectedly \" + token.type);\n    };\n    Tokenizer.prototype.push = function (token) {\n        this.token = token;\n        this.tokens.push(token);\n    };\n    Tokenizer.prototype.currentAttribute = function () {\n        return this._currentAttribute;\n    };\n    Tokenizer.prototype.addLocInfo = function () {\n        if (this.options.loc) {\n            this.current().loc = {\n                start: {\n                    line: this.startLine,\n                    column: this.startColumn\n                },\n                end: {\n                    line: this.tokenizer.line,\n                    column: this.tokenizer.column\n                }\n            };\n        }\n        this.startLine = this.tokenizer.line;\n        this.startColumn = this.tokenizer.column;\n    };\n    // Data\n    Tokenizer.prototype.beginDoctype = function () {\n        this.push({\n            type: \"Doctype\" /* Doctype */,\n            name: '',\n        });\n    };\n    Tokenizer.prototype.appendToDoctypeName = function (char) {\n        this.current(\"Doctype\" /* Doctype */).name += char;\n    };\n    Tokenizer.prototype.appendToDoctypePublicIdentifier = function (char) {\n        var doctype = this.current(\"Doctype\" /* Doctype */);\n        if (doctype.publicIdentifier === undefined) {\n            doctype.publicIdentifier = char;\n        }\n        else {\n            doctype.publicIdentifier += char;\n        }\n    };\n    Tokenizer.prototype.appendToDoctypeSystemIdentifier = function (char) {\n        var doctype = this.current(\"Doctype\" /* Doctype */);\n        if (doctype.systemIdentifier === undefined) {\n            doctype.systemIdentifier = char;\n        }\n        else {\n            doctype.systemIdentifier += char;\n        }\n    };\n    Tokenizer.prototype.endDoctype = function () {\n        this.addLocInfo();\n    };\n    Tokenizer.prototype.beginData = function () {\n        this.push({\n            type: \"Chars\" /* Chars */,\n            chars: ''\n        });\n    };\n    Tokenizer.prototype.appendToData = function (char) {\n        this.current(\"Chars\" /* Chars */).chars += char;\n    };\n    Tokenizer.prototype.finishData = function () {\n        this.addLocInfo();\n    };\n    // Comment\n    Tokenizer.prototype.beginComment = function () {\n        this.push({\n            type: \"Comment\" /* Comment */,\n            chars: ''\n        });\n    };\n    Tokenizer.prototype.appendToCommentData = function (char) {\n        this.current(\"Comment\" /* Comment */).chars += char;\n    };\n    Tokenizer.prototype.finishComment = function () {\n        this.addLocInfo();\n    };\n    // Tags - basic\n    Tokenizer.prototype.tagOpen = function () { };\n    Tokenizer.prototype.beginStartTag = function () {\n        this.push({\n            type: \"StartTag\" /* StartTag */,\n            tagName: '',\n            attributes: [],\n            selfClosing: false\n        });\n    };\n    Tokenizer.prototype.beginEndTag = function () {\n        this.push({\n            type: \"EndTag\" /* EndTag */,\n            tagName: ''\n        });\n    };\n    Tokenizer.prototype.finishTag = function () {\n        this.addLocInfo();\n    };\n    Tokenizer.prototype.markTagAsSelfClosing = function () {\n        this.current(\"StartTag\" /* StartTag */).selfClosing = true;\n    };\n    // Tags - name\n    Tokenizer.prototype.appendToTagName = function (char) {\n        this.current(\"StartTag\" /* StartTag */, \"EndTag\" /* EndTag */).tagName += char;\n    };\n    // Tags - attributes\n    Tokenizer.prototype.beginAttribute = function () {\n        this._currentAttribute = ['', '', false];\n    };\n    Tokenizer.prototype.appendToAttributeName = function (char) {\n        this.currentAttribute()[0] += char;\n    };\n    Tokenizer.prototype.beginAttributeValue = function (isQuoted) {\n        this.currentAttribute()[2] = isQuoted;\n    };\n    Tokenizer.prototype.appendToAttributeValue = function (char) {\n        this.currentAttribute()[1] += char;\n    };\n    Tokenizer.prototype.finishAttributeValue = function () {\n        this.current(\"StartTag\" /* StartTag */).attributes.push(this._currentAttribute);\n    };\n    Tokenizer.prototype.reportSyntaxError = function (message) {\n        this.current().syntaxError = message;\n    };\n    return Tokenizer;\n}());\n\nfunction tokenize(input, options) {\n    var tokenizer = new Tokenizer(new EntityParser(namedCharRefs), options);\n    return tokenizer.tokenize(input);\n}\n\nexport { namedCharRefs as HTML5NamedCharRefs, EntityParser, EventedTokenizer, Tokenizer, tokenize };\n//# sourceMappingURL=index.js.map","/**\n * We have already computed the character position of this offset or span.\n */\nexport type CharOffsetKind = 'CharPosition';\nexport const CHAR_OFFSET_KIND: CharOffsetKind = 'CharPosition';\n/**\n * This offset or span was instantiated with a Handlebars SourcePosition or SourceLocation. Its\n * character position will be computed on demand.\n */\nexport type HbsPositionKind = 'HbsPosition';\nexport const HBS_POSITION_KIND: HbsPositionKind = 'HbsPosition';\n/**\n * for (rare) situations where a node is created but there was no source location (e.g. the name\n * \"default\" in default blocks when the word \"default\" never appeared in source). This is used\n * by the internals when there is a legitimate reason for the internals to synthesize a node\n * with no location.\n */\nexport type InternalSyntheticKind = 'InternalsSynthetic';\nexport const INTERNAL_SYNTHETIC_KIND: InternalSyntheticKind = 'InternalsSynthetic';\n\n/**\n * For situations where a node represents zero parts of the source (for example, empty arguments).\n * In general, we attempt to assign these nodes *some* position (empty arguments can be\n * positioned immediately after the callee), but it's not always possible\n */\nexport type NonExistentKind = 'NonExistent';\nexport const NON_EXISTENT_KIND: NonExistentKind = 'NonExistent';\n\n/**\n * For situations where a source location was expected, but it didn't correspond to the node in\n * the source. This happens if a plugin creates broken locations.\n */\nexport type BrokenKind = 'Broken';\nexport const BROKEN_KIND: BrokenKind = 'Broken';\n\nexport type OffsetKind = CharOffsetKind | HbsPositionKind | InvisibleKind;\n\n/**\n * These kinds  describe spans that don't have a concrete location in the original source.\n */\nexport type InvisibleKind = BrokenKind | InternalSyntheticKind | NonExistentKind;\n\nexport function isInvisible(kind: OffsetKind): kind is InvisibleKind {\n  return kind !== CHAR_OFFSET_KIND && kind !== HBS_POSITION_KIND;\n}\n","/// FreeVarNamespace ///\n\nexport type HELPER_VAR_NS = 'Helper';\nexport const HELPER_VAR_NS: HELPER_VAR_NS = 'Helper';\nexport type MODIFIER_VAR_NS = 'Modifier';\nexport const MODIFIER_VAR_NS: MODIFIER_VAR_NS = 'Modifier';\nexport type COMPONENT_VAR_NS = 'Component';\nexport const COMPONENT_VAR_NS: COMPONENT_VAR_NS = 'Component';\n\nexport type FreeVarNamespace = HELPER_VAR_NS | MODIFIER_VAR_NS | COMPONENT_VAR_NS;\n","/// ResolutionType ///\n\nexport type VALUE_RESOLUTION = 'value';\nexport const VALUE_RESOLUTION: VALUE_RESOLUTION = 'value';\n\nexport type COMPONENT_RESOLUTION = 'component';\nexport const COMPONENT_RESOLUTION: COMPONENT_RESOLUTION = 'component';\n\nexport type HELPER_RESOLUTION = 'helper';\nexport const HELPER_RESOLUTION: HELPER_RESOLUTION = 'helper';\n\nexport type MODIFIER_RESOLUTION = 'modifier';\nexport const MODIFIER_RESOLUTION: MODIFIER_RESOLUTION = 'modifier';\n\nexport type COMPONENT_OR_HELPER_RESOLUTION = 'component or helper';\nexport const COMPONENT_OR_HELPER_RESOLUTION: COMPONENT_OR_HELPER_RESOLUTION = 'component or helper';\n\nexport type ResolutionType =\n  | VALUE_RESOLUTION\n  | COMPONENT_RESOLUTION\n  | HELPER_RESOLUTION\n  | MODIFIER_RESOLUTION\n  | COMPONENT_OR_HELPER_RESOLUTION;\n"],"names":["assign","Object"],"mappings":";;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA,MAAAA,MAAAA,GAAAC,MAAAD,CAAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA,IAAA,UAAA,GAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[2,3,4]}